{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from fastai2.tabular.all import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Rossmann" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data preparation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To create the feature-engineered train_clean and test_clean from the Kaggle competition data, run `rossman_data_clean.ipynb`. One important step that deals with time series is this:\n", "\n", "```python\n", "add_datepart(train, \"Date\", drop=False)\n", "add_datepart(test, \"Date\", drop=False)\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "path = Config().data/'rossmann'\n", "train_df = pd.read_pickle(path/'train_clean')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
01234
Store12345
DayOfWeek55555
Date2015-07-31 00:00:002015-07-31 00:00:002015-07-31 00:00:002015-07-31 00:00:002015-07-31 00:00:00
Sales526360648314139954822
Customers5556258211498559
..................
StateHoliday_bw00000
SchoolHoliday_bw55555
Promo_fw51511
StateHoliday_fw00000
SchoolHoliday_fw71511
\n", "

69 rows × 5 columns

\n", "
" ], "text/plain": [ " 0 1 \\\n", "Store 1 2 \n", "DayOfWeek 5 5 \n", "Date 2015-07-31 00:00:00 2015-07-31 00:00:00 \n", "Sales 5263 6064 \n", "Customers 555 625 \n", "... ... ... \n", "StateHoliday_bw 0 0 \n", "SchoolHoliday_bw 5 5 \n", "Promo_fw 5 1 \n", "StateHoliday_fw 0 0 \n", "SchoolHoliday_fw 7 1 \n", "\n", " 2 3 \\\n", "Store 3 4 \n", "DayOfWeek 5 5 \n", "Date 2015-07-31 00:00:00 2015-07-31 00:00:00 \n", "Sales 8314 13995 \n", "Customers 821 1498 \n", "... ... ... \n", "StateHoliday_bw 0 0 \n", "SchoolHoliday_bw 5 5 \n", "Promo_fw 5 1 \n", "StateHoliday_fw 0 0 \n", "SchoolHoliday_fw 5 1 \n", "\n", " 4 \n", "Store 5 \n", "DayOfWeek 5 \n", "Date 2015-07-31 00:00:00 \n", "Sales 4822 \n", "Customers 559 \n", "... ... \n", "StateHoliday_bw 0 \n", "SchoolHoliday_bw 5 \n", "Promo_fw 1 \n", "StateHoliday_fw 0 \n", "SchoolHoliday_fw 1 \n", "\n", "[69 rows x 5 columns]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_df.head().T" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "844338" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n = len(train_df); n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Experimenting with a sample" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "idx = np.random.permutation(range(n))[:2000]\n", "idx.sort()\n", "small_df = train_df.iloc[idx]\n", "small_cont_vars = ['CompetitionDistance', 'Mean_Humidity']\n", "small_cat_vars = ['Store', 'DayOfWeek', 'PromoInterval']\n", "small_df = small_df[small_cat_vars + small_cont_vars + ['Sales']].reset_index(drop=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
StoreDayOfWeekPromoIntervalCompetitionDistanceMean_HumiditySales
04715Feb,May,Aug,Nov5300.0509116.0
16565Jan,Apr,Jul,Oct410.0544576.0
211125NaN1880.0619626.0
34594Feb,May,Aug,Nov250.08610847.0
411084NaN540.0517187.0
\n", "
" ], "text/plain": [ " Store DayOfWeek PromoInterval CompetitionDistance Mean_Humidity \\\n", "0 471 5 Feb,May,Aug,Nov 5300.0 50 \n", "1 656 5 Jan,Apr,Jul,Oct 410.0 54 \n", "2 1112 5 NaN 1880.0 61 \n", "3 459 4 Feb,May,Aug,Nov 250.0 86 \n", "4 1108 4 NaN 540.0 51 \n", "\n", " Sales \n", "0 9116.0 \n", "1 4576.0 \n", "2 9626.0 \n", "3 10847.0 \n", "4 7187.0 " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "small_df.head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
StoreDayOfWeekPromoIntervalCompetitionDistanceMean_HumiditySales
1000753NaN22440.0684823.0
1001793NaN3320.0683968.0
10023903NaN1600.0719571.0
10034003Jan,Apr,Jul,Oct70.0737629.0
10048253Jan,Apr,Jul,Oct380.0783422.0
\n", "
" ], "text/plain": [ " Store DayOfWeek PromoInterval CompetitionDistance Mean_Humidity \\\n", "1000 75 3 NaN 22440.0 68 \n", "1001 79 3 NaN 3320.0 68 \n", "1002 390 3 NaN 1600.0 71 \n", "1003 400 3 Jan,Apr,Jul,Oct 70.0 73 \n", "1004 825 3 Jan,Apr,Jul,Oct 380.0 78 \n", "\n", " Sales \n", "1000 4823.0 \n", "1001 3968.0 \n", "1002 9571.0 \n", "1003 7629.0 \n", "1004 3422.0 " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "small_df.iloc[1000:].head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "splits = [list(range(1000)),list(range(1000,2000))]\n", "to = TabularPandas(small_df.copy(), Categorify, cat_names=small_cat_vars, cont_names=small_cont_vars, splits=splits)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
StoreDayOfWeekPromoIntervalCompetitionDistanceMean_HumiditySales
0283515300.0509116.0
138952410.0544576.0
2653501880.0619626.0
327241250.08610847.0
464940540.0517187.0
\n", "
" ], "text/plain": [ " Store DayOfWeek PromoInterval CompetitionDistance Mean_Humidity \\\n", "0 283 5 1 5300.0 50 \n", "1 389 5 2 410.0 54 \n", "2 653 5 0 1880.0 61 \n", "3 272 4 1 250.0 86 \n", "4 649 4 0 540.0 51 \n", "\n", " Sales \n", "0 9116.0 \n", "1 4576.0 \n", "2 9626.0 \n", "3 10847.0 \n", "4 7187.0 " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "to.train.items.head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
StoreDayOfWeekPromoIntervalCompetitionDistanceMean_HumiditySales
1000463022440.0684823.0
100149303320.0683968.0
10020301600.0719571.0
10032363270.0737629.0
100449232380.0783422.0
\n", "
" ], "text/plain": [ " Store DayOfWeek PromoInterval CompetitionDistance Mean_Humidity \\\n", "1000 46 3 0 22440.0 68 \n", "1001 49 3 0 3320.0 68 \n", "1002 0 3 0 1600.0 71 \n", "1003 236 3 2 70.0 73 \n", "1004 492 3 2 380.0 78 \n", "\n", " Sales \n", "1000 4823.0 \n", "1001 3968.0 \n", "1002 9571.0 \n", "1003 7629.0 \n", "1004 3422.0 " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "to.valid.items.head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(#8) [#na#,1,2,3,4,5,6,7]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "to.classes['DayOfWeek']" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "splits = [list(range(1000)),list(range(1000,2000))]\n", "to = TabularPandas(small_df.copy(), FillMissing, cat_names=small_cat_vars, cont_names=small_cont_vars, splits=splits)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
StoreDayOfWeekPromoIntervalCompetitionDistanceMean_HumiditySalesCompetitionDistance_naMean_Humidity_na
5212915NaN2380.0837928.0TrueFalse
\n", "
" ], "text/plain": [ " Store DayOfWeek PromoInterval CompetitionDistance Mean_Humidity \\\n", "521 291 5 NaN 2380.0 83 \n", "\n", " Sales CompetitionDistance_na Mean_Humidity_na \n", "521 7928.0 True False " ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "to.train.items[to.train.items['CompetitionDistance_na'] == True]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Preparing full data set" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "train_df = pd.read_pickle(path/'train_clean')\n", "test_df = pd.read_pickle(path/'test_clean')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(844338, 41088)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(train_df),len(test_df)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "procs=[FillMissing, Categorify, Normalize]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dep_var = 'Sales'\n", "cat_names = ['Store', 'DayOfWeek', 'Year', 'Month', 'Day', 'StateHoliday', 'StoreType', 'Assortment', \n", " 'PromoInterval', 'CompetitionOpenSinceYear', 'Promo2SinceYear', 'State', 'Week', 'Events', 'Promo_fw', \n", " 'Promo_bw', 'StateHoliday_fw', 'StateHoliday_bw', 'SchoolHoliday_fw', 'SchoolHoliday_bw']\n", "\n", "cont_names = ['CompetitionDistance', 'Max_TemperatureC', 'Mean_TemperatureC', 'Min_TemperatureC', \n", " 'Max_Humidity', 'Mean_Humidity', 'Min_Humidity', 'Max_Wind_SpeedKm_h', 'Mean_Wind_SpeedKm_h', \n", " 'CloudCover', 'trend', 'trend_DE', 'AfterStateHoliday', 'BeforeStateHoliday', 'Promo', 'SchoolHoliday']" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dep_var = 'Sales'\n", "df = train_df[cat_names + cont_names + [dep_var,'Date']].copy()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(Timestamp('2015-08-01 00:00:00'), Timestamp('2015-09-17 00:00:00'))" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_df['Date'].min(), test_df['Date'].max()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "41254" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cut = train_df['Date'][(train_df['Date'] == train_df['Date'][len(test_df)])].index.max()\n", "cut" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "splits = (list(range(cut, len(train_df))),list(range(cut)))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 5263.0\n", "1 6064.0\n", "2 8314.0\n", "3 13995.0\n", "4 4822.0\n", "Name: Sales, dtype: float64" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_df[dep_var].head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "train_df[dep_var] = np.log(train_df[dep_var])\n", "#train_df = train_df.iloc[:100000]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#cut = 20000" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "splits = (list(range(cut, len(train_df))),list(range(cut)))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 3min 57s, sys: 59.2 s, total: 4min 56s\n", "Wall time: 44.8 s\n" ] } ], "source": [ "%time to = TabularPandas(train_df, procs, cat_names, cont_names, dep_var, y_block=TransformBlock(), splits=splits)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dls = to.dataloaders(bs=512, path=path)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
StoreDayOfWeekYearMonthDayStateHolidayStoreTypeAssortmentPromoIntervalCompetitionOpenSinceYearPromo2SinceYearStateWeekEventsPromo_fwPromo_bwStateHoliday_fwStateHoliday_bwSchoolHoliday_fwSchoolHoliday_bwCompetitionDistance_naMax_TemperatureC_naMean_TemperatureC_naMin_TemperatureC_naMax_Humidity_naMean_Humidity_naMin_Humidity_naMax_Wind_SpeedKm_h_naMean_Wind_SpeedKm_h_naCloudCover_natrend_natrend_DE_naAfterStateHoliday_naBeforeStateHoliday_naPromo_naSchoolHoliday_naCompetitionDistanceMax_TemperatureCMean_TemperatureCMin_TemperatureCMax_HumidityMean_HumidityMin_HumidityMax_Wind_SpeedKm_hMean_Wind_SpeedKm_hCloudCovertrendtrend_DEAfterStateHolidayBeforeStateHolidayPromoSchoolHolidaySales
09062013511Falseaa#na#2007#na#NW19Rain500100FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse329.99992616.011.07.000000e+0093.077.048.00000037.016.06.062.00000060.01.999998-9.0000001.436922e-081.656771e-098.963928
185242013314FalsecaJan,Apr,Jul,Oct20042011HE11Snow310000FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse940.0001852.0-4.0-1.100000e+0193.078.051.00000021.05.04.070.00000062.071.999998-15.0000001.436922e-081.656771e-098.379310
218932014924Falseda#na#2014#na#RP39Rain220000FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse5760.00001316.011.06.000000e+0097.077.059.00000011.05.06.063.00000072.096.999998-9.0000001.436922e-081.656771e-098.744328
36152201434Falseda#na#2007#na#HE10#na#420000FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse729.99981413.07.04.409999e-08100.072.028.99999913.06.03.050.00000055.062.000000-45.0000001.000000e+001.656771e-099.527994
45253201326Falsedc#na#2013#na#BE6#na#330033FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse1869.9999364.01.0-3.000000e+0093.073.048.00000024.014.04.055.00000051.036.000000-51.0000001.000000e+001.000000e+009.314791
567122013101FalseacJan,Apr,Jul,Oct20082010BY40#na#131000FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse2070.00011211.09.08.000000e+0093.084.071.00000013.08.07.057.00000062.047.000000-1.9999991.436922e-081.656771e-098.411611
624342015312FalseaaFeb,May,Aug,Nov#na#2013BY11Snow310000FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse310.0000018.04.04.409999e-0887.071.049.00000014.06.06.065.00000074.065.000000-21.9999991.436922e-081.656771e-098.549273
780022013910Falseda#na#2014#na#RP37Rain420000FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse2020.00006817.014.01.200000e+0189.064.041.00000024.014.05.037.99999951.0103.000001-23.0000001.000000e+001.656771e-098.782169
825312013610FalseacFeb,May,Aug,Nov#na#2013NW24#na#040000FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse250.00022719.014.01.100000e+0182.066.039.00000019.013.04.069.00000067.011.000001-115.0000031.436922e-081.656771e-098.610683
9105332014827Falseaa#na#2015#na#HB,NI35Fog220077FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse1710.00007421.013.06.000000e+00100.080.037.00000014.05.03.075.00000077.079.000001-37.0000001.436922e-081.000000e+008.795733
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dls.show_batch()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Model" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "max_log_y = np.log(1.2) + np.max(train_df['Sales'])\n", "y_range = (0, max_log_y)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dls.c = 1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn = tabular_learner(dls, layers=[1000,500], loss_func=MSELossFlat(),\n", " config=tabular_config(ps=[0.001,0.01], embed_p=0.04, y_range=y_range), \n", " metrics=exp_rmspe)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "TabularModel(\n", " (embeds): ModuleList(\n", " (0): Embedding(1116, 81)\n", " (1): Embedding(8, 5)\n", " (2): Embedding(4, 3)\n", " (3): Embedding(13, 7)\n", " (4): Embedding(32, 11)\n", " (5): Embedding(3, 3)\n", " (6): Embedding(5, 4)\n", " (7): Embedding(4, 3)\n", " (8): Embedding(4, 3)\n", " (9): Embedding(24, 9)\n", " (10): Embedding(8, 5)\n", " (11): Embedding(13, 7)\n", " (12): Embedding(53, 15)\n", " (13): Embedding(22, 9)\n", " (14): Embedding(7, 5)\n", " (15): Embedding(7, 5)\n", " (16): Embedding(4, 3)\n", " (17): Embedding(4, 3)\n", " (18): Embedding(9, 5)\n", " (19): Embedding(9, 5)\n", " (20): Embedding(3, 3)\n", " (21): Embedding(2, 2)\n", " (22): Embedding(2, 2)\n", " (23): Embedding(2, 2)\n", " (24): Embedding(2, 2)\n", " (25): Embedding(2, 2)\n", " (26): Embedding(2, 2)\n", " (27): Embedding(2, 2)\n", " (28): Embedding(2, 2)\n", " (29): Embedding(3, 3)\n", " (30): Embedding(2, 2)\n", " (31): Embedding(2, 2)\n", " (32): Embedding(2, 2)\n", " (33): Embedding(2, 2)\n", " (34): Embedding(2, 2)\n", " (35): Embedding(2, 2)\n", " )\n", " (emb_drop): Dropout(p=0.04, inplace=False)\n", " (bn_cont): BatchNorm1d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (layers): Sequential(\n", " (0): LinBnDrop(\n", " (0): BatchNorm1d(241, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (1): Dropout(p=0.001, inplace=False)\n", " (2): Linear(in_features=241, out_features=1000, bias=False)\n", " (3): ReLU(inplace=True)\n", " )\n", " (1): LinBnDrop(\n", " (0): BatchNorm1d(1000, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (1): Dropout(p=0.01, inplace=False)\n", " (2): Linear(in_features=1000, out_features=500, bias=False)\n", " (3): ReLU(inplace=True)\n", " )\n", " (2): LinBnDrop(\n", " (0): Linear(in_features=500, out_features=1, bias=True)\n", " )\n", " )\n", ")" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.model" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "16" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(dls.train_ds.cont_names)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "learn.lr_find()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epochtrain_lossvalid_loss_exp_rmspetime
00.0274840.0280100.15912301:16
10.0154870.0182400.14121601:16
20.0115810.0157340.12302501:16
30.0084310.0126070.11260901:16
40.0072780.0117240.10859601:16
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "learn.fit_one_cycle(5, 3e-3, wd=0.2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(10th place in the competition was 0.108)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "learn.recorder.plot_loss(skip_start=1000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(10th place in the competition was 0.108)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Inference on the test set" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_to = to.new(test_df)\n", "test_to.process()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_dls = test_to.dataloaders(bs=512, path=path, shuffle_train=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "learn.metrics=[]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tst_preds,_ = learn.get_preds(dl=test_dls.train)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1, 41088)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.exp(tst_preds.numpy()).T.shape" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_df[\"Sales\"]=np.exp(tst_preds.numpy()).T[0]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "test_df[[\"Id\",\"Sales\"]] = test_df[[\"Id\",\"Sales\"]].astype(\"int\")\n", "test_df[[\"Id\",\"Sales\"]].to_csv(\"rossmann_submission.csv\",index=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This submission scored 3rd on the private leaderboard." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "jupytext": { "split_at_heading": true }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" } }, "nbformat": 4, "nbformat_minor": 2 }