{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%reload_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from fastai.tabular 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": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[PosixPath('data/rossmann/joined'),\n", " PosixPath('data/rossmann/state_names.csv'),\n", " PosixPath('data/rossmann/test_clean'),\n", " PosixPath('data/rossmann/train_clean'),\n", " PosixPath('data/rossmann/googletrend.csv'),\n", " PosixPath('data/rossmann/sample_submission.csv'),\n", " PosixPath('data/rossmann/test.csv'),\n", " PosixPath('data/rossmann/df'),\n", " PosixPath('data/rossmann/store.csv'),\n", " PosixPath('data/rossmann/train.csv'),\n", " PosixPath('data/rossmann/joined_test'),\n", " PosixPath('data/rossmann/weather.csv'),\n", " PosixPath('data/rossmann/store_states.csv')]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "path = Path('data/rossmann/')\n", "path.ls()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "train_df = pd.read_pickle(path / 'train_clean')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "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", "
01234
index01234
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
Open11111
Promo11111
StateHolidayFalseFalseFalseFalseFalse
SchoolHoliday11111
Year20152015201520152015
Month77777
Week3131313131
Day3131313131
Dayofweek44444
Dayofyear212212212212212
Is_month_endTrueTrueTrueTrueTrue
Is_month_startFalseFalseFalseFalseFalse
Is_quarter_endFalseFalseFalseFalseFalse
Is_quarter_startFalseFalseFalseFalseFalse
Is_year_endFalseFalseFalseFalseFalse
Is_year_startFalseFalseFalseFalseFalse
Elapsed14383008001438300800143830080014383008001438300800
StoreTypecaaca
Assortmentaaaca
CompetitionDistance12705701413062029910
CompetitionOpenSinceMonth9111294
CompetitionOpenSinceYear20082007200620092015
Promo201100
Promo2SinceWeek1131411
..................
Min_Sea_Level_PressurehPa10151017101710141016
Max_VisibilityKm3110311010
Mean_VisibilityKm1510141010
Min_VisibilitykM1010101010
Max_Wind_SpeedKm_h2414142314
Mean_Wind_SpeedKm_h111151611
Max_Gust_SpeedKm_hNaNNaNNaNNaNNaN
Precipitationmm00000
CloudCover14264
EventsFogFogFogNaNNaN
WindDirDegrees13309354282290
StateNameHessenThueringenNordrheinWestfalenBerlinSachsen
CompetitionOpenSince2008-09-15 00:00:002007-11-15 00:00:002006-12-15 00:00:002009-09-15 00:00:002015-04-15 00:00:00
CompetitionDaysOpen2510281531502145107
CompetitionMonthsOpen242424243
Promo2Since1900-01-01 00:00:002010-03-29 00:00:002011-04-04 00:00:001900-01-01 00:00:001900-01-01 00:00:00
Promo2Days01950157900
Promo2Weeks0252500
AfterSchoolHoliday00000
BeforeSchoolHoliday00000
AfterStateHoliday5767576757
BeforeStateHoliday00000
AfterPromo00000
BeforePromo00000
SchoolHoliday_bw55555
StateHoliday_bw00000
Promo_bw55555
SchoolHoliday_fw71511
StateHoliday_fw00000
Promo_fw51511
\n", "

93 rows × 5 columns

\n", "
" ], "text/plain": [ " 0 1 \\\n", "index 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", "Open 1 1 \n", "Promo 1 1 \n", "StateHoliday False False \n", "SchoolHoliday 1 1 \n", "Year 2015 2015 \n", "Month 7 7 \n", "Week 31 31 \n", "Day 31 31 \n", "Dayofweek 4 4 \n", "Dayofyear 212 212 \n", "Is_month_end True True \n", "Is_month_start False False \n", "Is_quarter_end False False \n", "Is_quarter_start False False \n", "Is_year_end False False \n", "Is_year_start False False \n", "Elapsed 1438300800 1438300800 \n", "StoreType c a \n", "Assortment a a \n", "CompetitionDistance 1270 570 \n", "CompetitionOpenSinceMonth 9 11 \n", "CompetitionOpenSinceYear 2008 2007 \n", "Promo2 0 1 \n", "Promo2SinceWeek 1 13 \n", "... ... ... \n", "Min_Sea_Level_PressurehPa 1015 1017 \n", "Max_VisibilityKm 31 10 \n", "Mean_VisibilityKm 15 10 \n", "Min_VisibilitykM 10 10 \n", "Max_Wind_SpeedKm_h 24 14 \n", "Mean_Wind_SpeedKm_h 11 11 \n", "Max_Gust_SpeedKm_h NaN NaN \n", "Precipitationmm 0 0 \n", "CloudCover 1 4 \n", "Events Fog Fog \n", "WindDirDegrees 13 309 \n", "StateName Hessen Thueringen \n", "CompetitionOpenSince 2008-09-15 00:00:00 2007-11-15 00:00:00 \n", "CompetitionDaysOpen 2510 2815 \n", "CompetitionMonthsOpen 24 24 \n", "Promo2Since 1900-01-01 00:00:00 2010-03-29 00:00:00 \n", "Promo2Days 0 1950 \n", "Promo2Weeks 0 25 \n", "AfterSchoolHoliday 0 0 \n", "BeforeSchoolHoliday 0 0 \n", "AfterStateHoliday 57 67 \n", "BeforeStateHoliday 0 0 \n", "AfterPromo 0 0 \n", "BeforePromo 0 0 \n", "SchoolHoliday_bw 5 5 \n", "StateHoliday_bw 0 0 \n", "Promo_bw 5 5 \n", "SchoolHoliday_fw 7 1 \n", "StateHoliday_fw 0 0 \n", "Promo_fw 5 1 \n", "\n", " 2 3 \\\n", "index 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", "Open 1 1 \n", "Promo 1 1 \n", "StateHoliday False False \n", "SchoolHoliday 1 1 \n", "Year 2015 2015 \n", "Month 7 7 \n", "Week 31 31 \n", "Day 31 31 \n", "Dayofweek 4 4 \n", "Dayofyear 212 212 \n", "Is_month_end True True \n", "Is_month_start False False \n", "Is_quarter_end False False \n", "Is_quarter_start False False \n", "Is_year_end False False \n", "Is_year_start False False \n", "Elapsed 1438300800 1438300800 \n", "StoreType a c \n", "Assortment a c \n", "CompetitionDistance 14130 620 \n", "CompetitionOpenSinceMonth 12 9 \n", "CompetitionOpenSinceYear 2006 2009 \n", "Promo2 1 0 \n", "Promo2SinceWeek 14 1 \n", "... ... ... \n", "Min_Sea_Level_PressurehPa 1017 1014 \n", "Max_VisibilityKm 31 10 \n", "Mean_VisibilityKm 14 10 \n", "Min_VisibilitykM 10 10 \n", "Max_Wind_SpeedKm_h 14 23 \n", "Mean_Wind_SpeedKm_h 5 16 \n", "Max_Gust_SpeedKm_h NaN NaN \n", "Precipitationmm 0 0 \n", "CloudCover 2 6 \n", "Events Fog NaN \n", "WindDirDegrees 354 282 \n", "StateName NordrheinWestfalen Berlin \n", "CompetitionOpenSince 2006-12-15 00:00:00 2009-09-15 00:00:00 \n", "CompetitionDaysOpen 3150 2145 \n", "CompetitionMonthsOpen 24 24 \n", "Promo2Since 2011-04-04 00:00:00 1900-01-01 00:00:00 \n", "Promo2Days 1579 0 \n", "Promo2Weeks 25 0 \n", "AfterSchoolHoliday 0 0 \n", "BeforeSchoolHoliday 0 0 \n", "AfterStateHoliday 57 67 \n", "BeforeStateHoliday 0 0 \n", "AfterPromo 0 0 \n", "BeforePromo 0 0 \n", "SchoolHoliday_bw 5 5 \n", "StateHoliday_bw 0 0 \n", "Promo_bw 5 5 \n", "SchoolHoliday_fw 5 1 \n", "StateHoliday_fw 0 0 \n", "Promo_fw 5 1 \n", "\n", " 4 \n", "index 4 \n", "Store 5 \n", "DayOfWeek 5 \n", "Date 2015-07-31 00:00:00 \n", "Sales 4822 \n", "Customers 559 \n", "Open 1 \n", "Promo 1 \n", "StateHoliday False \n", "SchoolHoliday 1 \n", "Year 2015 \n", "Month 7 \n", "Week 31 \n", "Day 31 \n", "Dayofweek 4 \n", "Dayofyear 212 \n", "Is_month_end True \n", "Is_month_start False \n", "Is_quarter_end False \n", "Is_quarter_start False \n", "Is_year_end False \n", "Is_year_start False \n", "Elapsed 1438300800 \n", "StoreType a \n", "Assortment a \n", "CompetitionDistance 29910 \n", "CompetitionOpenSinceMonth 4 \n", "CompetitionOpenSinceYear 2015 \n", "Promo2 0 \n", "Promo2SinceWeek 1 \n", "... ... \n", "Min_Sea_Level_PressurehPa 1016 \n", "Max_VisibilityKm 10 \n", "Mean_VisibilityKm 10 \n", "Min_VisibilitykM 10 \n", "Max_Wind_SpeedKm_h 14 \n", "Mean_Wind_SpeedKm_h 11 \n", "Max_Gust_SpeedKm_h NaN \n", "Precipitationmm 0 \n", "CloudCover 4 \n", "Events NaN \n", "WindDirDegrees 290 \n", "StateName Sachsen \n", "CompetitionOpenSince 2015-04-15 00:00:00 \n", "CompetitionDaysOpen 107 \n", "CompetitionMonthsOpen 3 \n", "Promo2Since 1900-01-01 00:00:00 \n", "Promo2Days 0 \n", "Promo2Weeks 0 \n", "AfterSchoolHoliday 0 \n", "BeforeSchoolHoliday 0 \n", "AfterStateHoliday 57 \n", "BeforeStateHoliday 0 \n", "AfterPromo 0 \n", "BeforePromo 0 \n", "SchoolHoliday_bw 5 \n", "StateHoliday_bw 0 \n", "Promo_bw 5 \n", "SchoolHoliday_fw 1 \n", "StateHoliday_fw 0 \n", "Promo_fw 1 \n", "\n", "[93 rows x 5 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_df.head().T" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "844338" ] }, "execution_count": 7, "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": 11, "metadata": {}, "outputs": [], "source": [ "idx = np.random.permutation(range(n))[:2000]\n", "idx.sort()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "small_train_df = train_df.iloc[idx[:1000]]\n", "small_test_df = train_df.iloc[idx[1000:]]\n", "small_cont_vars = ['CompetitionDistance', 'Mean_Humidity']\n", "small_cat_vars = ['Store', 'DayOfWeek', 'PromoInterval']\n", "small_train_df = small_train_df[small_cat_vars + small_cont_vars + ['Sales']]\n", "small_test_df = small_test_df[small_cat_vars + small_cont_vars + ['Sales']]" ] }, { "cell_type": "code", "execution_count": 13, "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
2452465NaN4660.07010031
5235255NaN1870.06110461
24031783NaN1710.05510766
25012763Mar,Jun,Sept,Dec2960.0553944
35472092Jan,Apr,Jul,Oct11680.0907521
\n", "
" ], "text/plain": [ " Store DayOfWeek PromoInterval CompetitionDistance Mean_Humidity \\\n", "245 246 5 NaN 4660.0 70 \n", "523 525 5 NaN 1870.0 61 \n", "2403 178 3 NaN 1710.0 55 \n", "2501 276 3 Mar,Jun,Sept,Dec 2960.0 55 \n", "3547 209 2 Jan,Apr,Jul,Oct 11680.0 90 \n", "\n", " Sales \n", "245 10031 \n", "523 10461 \n", "2403 10766 \n", "2501 3944 \n", "3547 7521 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "small_train_df.head()" ] }, { "cell_type": "code", "execution_count": 14, "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
407390272Jan,Apr,Jul,Oct60.06315278
4077894262NaN250.0637667
40838010172NaN110.08011214
4093258471Feb,May,Aug,Nov190.06410440
4101224986Jan,Apr,Jul,Oct990.0758645
\n", "
" ], "text/plain": [ " Store DayOfWeek PromoInterval CompetitionDistance Mean_Humidity \\\n", "407390 27 2 Jan,Apr,Jul,Oct 60.0 63 \n", "407789 426 2 NaN 250.0 63 \n", "408380 1017 2 NaN 110.0 80 \n", "409325 847 1 Feb,May,Aug,Nov 190.0 64 \n", "410122 498 6 Jan,Apr,Jul,Oct 990.0 75 \n", "\n", " Sales \n", "407390 15278 \n", "407789 7667 \n", "408380 11214 \n", "409325 10440 \n", "410122 8645 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "small_test_df.head()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "categorify = Categorify(small_cat_vars, small_cont_vars)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "categorify(small_train_df)\n", "categorify(small_test_df, test=True)" ] }, { "cell_type": "code", "execution_count": 17, "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
40739027.02Jan,Apr,Jul,Oct60.06315278
407789426.02NaN250.0637667
408380NaN2NaN110.08011214
409325847.01Feb,May,Aug,Nov190.06410440
410122498.06Jan,Apr,Jul,Oct990.0758645
\n", "
" ], "text/plain": [ " Store DayOfWeek PromoInterval CompetitionDistance Mean_Humidity \\\n", "407390 27.0 2 Jan,Apr,Jul,Oct 60.0 63 \n", "407789 426.0 2 NaN 250.0 63 \n", "408380 NaN 2 NaN 110.0 80 \n", "409325 847.0 1 Feb,May,Aug,Nov 190.0 64 \n", "410122 498.0 6 Jan,Apr,Jul,Oct 990.0 75 \n", "\n", " Sales \n", "407390 15278 \n", "407789 7667 \n", "408380 11214 \n", "409325 10440 \n", "410122 8645 " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "small_test_df.head()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Feb,May,Aug,Nov', 'Jan,Apr,Jul,Oct', 'Mar,Jun,Sept,Dec'], dtype='object')" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "small_train_df.PromoInterval.cat.categories" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "245 -1\n", "523 -1\n", "2403 -1\n", "2501 2\n", "3547 1\n", "dtype: int8" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "small_train_df['PromoInterval'].cat.codes[:5]" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "fill_missing = FillMissing(small_cat_vars, small_cont_vars)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [ { "ename": "Exception", "evalue": "There are nan values in field CompetitionDistance but there were none in the training set. \n Please fix those manually.", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mException\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mfill_missing\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msmall_train_df\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mfill_missing\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msmall_test_df\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtest\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m~/anaconda3/envs/fastai-v1/lib/python3.6/site-packages/fastai/tabular/transform.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, df, test)\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[0;34m\"Apply the correct function to `df` depending on `test`.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[0mfunc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_test\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtest\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply_train\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 42\u001b[0;31m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 43\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 44\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mapply_train\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/anaconda3/envs/fastai-v1/lib/python3.6/site-packages/fastai/tabular/transform.py\u001b[0m in \u001b[0;36mapply_test\u001b[0;34m(self, df)\u001b[0m\n\u001b[1;32m 95\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misnull\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 96\u001b[0m raise Exception(f\"\"\"There are nan values in field {name} but there were none in the training set. \n\u001b[0;32m---> 97\u001b[0;31m Please fix those manually.\"\"\")\n\u001b[0m\u001b[1;32m 98\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 99\u001b[0m \u001b[0;32mclass\u001b[0m \u001b[0mNormalize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mTabularProc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mException\u001b[0m: There are nan values in field CompetitionDistance but there were none in the training set. \n Please fix those manually." ] } ], "source": [ "fill_missing(small_train_df)\n", "fill_missing(small_test_df, test=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fix the previous error: https://forums.fast.ai/t/there-are-nan-values-in-field-but-there-were-none-in-the-training-set/32260?u=cedric" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "small_test_df.CompetitionDistance.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 75, "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", "
StoreDayOfWeekPromoIntervalCompetitionDistanceMean_HumiditySales
413591NaN3NaNNaN773793
592154NaN6NaNNaN794936
620431NaN5NaNNaN685776
810783NaN3Feb,May,Aug,NovNaN883839
\n", "
" ], "text/plain": [ " Store DayOfWeek PromoInterval CompetitionDistance Mean_Humidity \\\n", "413591 NaN 3 NaN NaN 77 \n", "592154 NaN 6 NaN NaN 79 \n", "620431 NaN 5 NaN NaN 68 \n", "810783 NaN 3 Feb,May,Aug,Nov NaN 88 \n", "\n", " Sales \n", "413591 3793 \n", "592154 4936 \n", "620431 5776 \n", "810783 3839 " ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "small_test_df[small_test_df[\"CompetitionDistance\"].isnull()]" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2290.0\n" ] } ], "source": [ "filler = small_test_df.loc[:,'CompetitionDistance'].median()\n", "print(filler)\n", "small_test_df.loc[:,'CompetitionDistance'] = small_test_df.loc[:,'CompetitionDistance'].fillna(filler)\n", "# small_test_df[small_test_df[\"CompetitionDistance\"] == filler]" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [], "source": [ "fill_missing(small_test_df, test=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "# small_train_df[small_train_df['CompetitionDistance_na'] == True]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Preparing full data set" ] }, { "cell_type": "code", "execution_count": 81, "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": 82, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(844338, 41088)" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(train_df), len(test_df)" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [], "source": [ "procs = [FillMissing, Categorify, Normalize]" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [], "source": [ "cat_vars = ['Store', 'DayOfWeek', 'Year', 'Month', 'Day', 'StateHoliday', 'CompetitionMonthsOpen',\n", " 'Promo2Weeks', 'StoreType', 'Assortment', 'PromoInterval', 'CompetitionOpenSinceYear', 'Promo2SinceYear',\n", " 'State', 'Week', 'Events', 'Promo_fw', 'Promo_bw', 'StateHoliday_fw', 'StateHoliday_bw',\n", " 'SchoolHoliday_fw', 'SchoolHoliday_bw']\n", "\n", "cont_vars = ['CompetitionDistance', 'Max_TemperatureC', 'Mean_TemperatureC', 'Min_TemperatureC',\n", " 'Max_Humidity', 'Mean_Humidity', 'Min_Humidity', 'Max_Wind_SpeedKm_h', \n", " 'Mean_Wind_SpeedKm_h', 'CloudCover', 'trend', 'trend_DE',\n", " 'AfterStateHoliday', 'BeforeStateHoliday', 'Promo', 'SchoolHoliday']" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [], "source": [ "dep_var = 'Sales'\n", "df = train_df[cat_vars + cont_vars + [dep_var, 'Date']].copy()" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(Timestamp('2015-08-01 00:00:00'), Timestamp('2015-09-17 00:00:00'))" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_df['Date'].min(), test_df['Date'].max()" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "41395" ] }, "execution_count": 87, "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": 88, "metadata": {}, "outputs": [], "source": [ "valid_idx = range(cut)" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 5263\n", "1 6064\n", "2 8314\n", "3 13995\n", "4 4822\n", "Name: Sales, dtype: int64" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[dep_var].head()" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [], "source": [ "data = (TabularList.from_df(df, path=path, cat_names=cat_vars, cont_names=cont_vars, procs=procs)\n", " .split_by_idx(valid_idx)\n", " .label_from_df(cols=dep_var, label_cls=FloatList, log=True)\n", " .databunch())" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [], "source": [ "doc(FloatList)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Model" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [], "source": [ "max_log_y = np.log(np.max(train_df['Sales'])*1.2)\n", "y_range = torch.tensor([0, max_log_y], device=defaults.device)" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [], "source": [ "learn = tabular_learner(data, layers=[1000,500], ps=[0.001,0.01], emb_drop=0.04,\n", " y_range=y_range, metrics=exp_rmspe)" ] }, { "cell_type": "code", "execution_count": 99, "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(26, 10)\n", " (7): Embedding(27, 10)\n", " (8): Embedding(5, 4)\n", " (9): Embedding(4, 3)\n", " (10): Embedding(4, 3)\n", " (11): Embedding(24, 9)\n", " (12): Embedding(9, 5)\n", " (13): Embedding(13, 7)\n", " (14): Embedding(53, 15)\n", " (15): Embedding(22, 9)\n", " (16): Embedding(7, 5)\n", " (17): Embedding(7, 5)\n", " (18): Embedding(4, 3)\n", " (19): Embedding(4, 3)\n", " (20): Embedding(9, 5)\n", " (21): Embedding(9, 5)\n", " (22): Embedding(3, 3)\n", " (23): Embedding(3, 3)\n", " )\n", " (emb_drop): Dropout(p=0.04)\n", " (bn_cont): BatchNorm1d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (layers): Sequential(\n", " (0): Linear(in_features=233, out_features=1000, bias=True)\n", " (1): ReLU(inplace)\n", " (2): BatchNorm1d(1000, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (3): Dropout(p=0.001)\n", " (4): Linear(in_features=1000, out_features=500, bias=True)\n", " (5): ReLU(inplace)\n", " (6): BatchNorm1d(500, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (7): Dropout(p=0.01)\n", " (8): Linear(in_features=500, out_features=1, bias=True)\n", " )\n", ")" ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.model" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "16" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(data.train_ds.cont_names)" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n" ] } ], "source": [ "learn.lr_find()" ] }, { "cell_type": "code", "execution_count": 128, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "learn.recorder.plot(skip_start=10, skip_end=0)" ] }, { "cell_type": "code", "execution_count": 129, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Total time: 12:32

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_lossexp_rmspe
10.0219420.0240530.155830
20.0196450.0170170.129867
30.0163880.0219860.120790
40.0120600.0125760.110928
50.0096120.0109400.103163
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "learn.fit_one_cycle(5, 1e-3, wd=0.2)" ] }, { "cell_type": "code", "execution_count": 130, "metadata": {}, "outputs": [], "source": [ "learn.save('1')" ] }, { "cell_type": "code", "execution_count": 131, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEKCAYAAAA4t9PUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzsnXd4VEXXwH+TTSVAQu+QSFFahFAEAQURBFFRRAEVsWJ9LVhe1FdEbIgN/VSwomBBRUAUAUVAUZEqRXqAAAGkEwLpyXx/7N3N9pLdTT2/58mTe+fO3J0bljn3zGlKa40gCIIgFJew0p6AIAiCUL4RQSIIgiAEhAgSQRAEISBEkAiCIAgBIYJEEARBCAgRJIIgCEJAiCARBEEQAkIEiSAIghAQIkgEQRCEgAgv7QmUBLVr19YJCQmlPQ1BEIRyxdq1a49pret461cpBElCQgJr1qwp7WkIgiCUK5RSe33pJ1tbgiAIQkCIIBEEQRACQgSJIAiCEBCVwkYiCELFIC8vj7S0NLKzs0t7KhWK6OhoGjduTERERLHGiyARBKHckJaWRrVq1UhISEApVdrTqRBorTl+/DhpaWkkJiYW6x6ytSUIQrkhOzubWrVqiRAJIkopatWqFZCWJ4JEEIRyhQiR4BPo31QESQVhwaZDnDibW9rTEAShEiKCpAJw/EwO93y+jjs+XV3aUxGECs3x48fp0KEDHTp0oH79+jRq1Mh6npvr24vcrbfeyvbt20M805JFjO0VgPxCDcD+k1mlPBNBqNjUqlWL9evXAzB+/HiqVq3Ko48+atdHa43WmrAw1+/p06ZNC/k8SxrRSCoAlu1NrUt3HoJQWUlJSaFdu3bcfffdJCcnc+jQIUaPHk3nzp1p27YtEyZMsPbt2bMn69evJz8/n/j4eMaOHcv5559P9+7dOXLkSCk+RfERjaQCEGZIEi2SRKhEPPv9ZrYcPB3Ue7ZpWJ1nrmxbrLFbtmxh2rRpTJ06FYCJEydSs2ZN8vPz6dOnD0OHDqVNmzZ2Y9LT07n44ouZOHEiY8aM4eOPP2bs2LEBP0dJIxpJBcAiSApFkAhCqdG8eXO6dOliPf/yyy9JTk4mOTmZrVu3smXLFqcxMTExDBw4EIBOnTqRmppaUtMNKqKRVAAsjnuFIkeESkRxNYdQERsbaz3euXMnb775JqtWrSI+Pp6bbrrJZZxGZGSk9dhkMpGfn18icw02opFUAIpsJCJJBKEscPr0aapVq0b16tU5dOgQixYtKu0phZSQChKl1ACl1HalVIpSymnjTykVpZT6yri+UimVYLR3VUqtN342KKWu8fWelRFLMJGIEUEoGyQnJ9OmTRvatWvHnXfeSY8ePUp7SiFFheotVillAnYA/YA0YDUwQmu9xabPvUCS1vpupdRw4Bqt9TClVBUgV2udr5RqAGwAGmJeKz3e0xWdO3fWFbmw1ensPJLG/0TVqHD+efay0p6OIISMrVu30rp169KeRoXE1d9WKbVWa93Z29hQaiRdgRSt9W6tdS4wExjs0Gcw8KlxPAvoq5RSWutMrbVlszCaopdtX+5ZaZGtLUEQSoNQCpJGwH6b8zSjzWUfQ3CkA7UAlFIXKKU2A5uAu43rvtyz0lIggkQQhFIglILEVRYwx5XObR+t9UqtdVugC/CEUirax3uab6zUaKXUGqXUmqNHj/ox7fKLyBFBEEqDUAqSNKCJzXlj4KC7PkqpcCAOOGHbQWu9FTgLtPPxnpZx72utO2utO9epUyeAxyg/iBwRBKE0CKUgWQ20VEolKqUigeHAPIc+84BRxvFQYInWWhtjwgGUUs2Ac4FUH+9Z6bBqIiJJBEEoBUIWkGh4XN0PLAJMwMda681KqQnAGq31POAjYIZSKgWzJjLcGN4TGKuUygMKgXu11scAXN0zVM9Q3tAiSQRBKAVCGkeitf5Ra91Ka91ca/2C0TbOECJorbO11tdprVtorbtqrXcb7TO01m211h201sla67me7imYERuJIISW3r17OwUXTp48mXvvvdftmKpVqwJw8OBBhg4d6va+3kIUJk+eTGZmpvX88ssv59SpU75OPaRIZHsFQuSIIISWESNGMHPmTLu2mTNnMmLECK9jGzZsyKxZs4r92Y6C5McffyQ+Pr7Y9wsmIkgqEJK0URBCy9ChQ/nhhx/IyckBIDU1lYMHD9KhQwf69u1LcnIy7du357vvvnMam5qaSrt27QDIyspi+PDhJCUlMWzYMLKyimoJ3XPPPdb088888wwAb731FgcPHqRPnz706dMHgISEBI4dOwbA66+/Trt27WjXrh2TJ0+2fl7r1q258847adu2Lf3797f7nGAiSRsrECJHhErFgrHw76bg3rN+exg4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\n", "text/plain": [ "

" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "learn.recorder.plot_losses(last=-1)" ] }, { "cell_type": "code", "execution_count": 132, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/plain": [ "Learner(data=TabularDataBunch;\n", "\n", "Train: LabelList\n", "y: FloatList (802943 items)\n", "[FloatItem 9.022926, FloatItem 8.443546, FloatItem 8.547528, FloatItem 8.92758, FloatItem 9.091557]...\n", "Path: data/rossmann\n", "x: TabularList (802943 items)\n", "[TabularLine Store 1115; DayOfWeek 5; Year 2015; Month 6; Day 19; StateHoliday False; CompetitionMonthsOpen 24; Promo2Weeks 25; StoreType d; Assortment c; PromoInterval Mar,Jun,Sept,Dec; CompetitionOpenSinceYear 1900; Promo2SinceYear 2012; State HE; Week 25; Events Rain; Promo_fw 1.0; Promo_bw 5.0; StateHoliday_fw 0.0; StateHoliday_bw 0.0; SchoolHoliday_fw 0.0; SchoolHoliday_bw 0.0; CompetitionDistance_na False; CloudCover_na False; CompetitionDistance -0.0130; Max_TemperatureC 0.1333; Mean_TemperatureC 0.4683; Min_TemperatureC 0.8602; Max_Humidity 0.0780; Mean_Humidity -0.3412; Min_Humidity -0.0811; Max_Wind_SpeedKm_h -0.1780; Mean_Wind_SpeedKm_h 0.1902; CloudCover 0.2552; trend 0.4066; trend_DE 0.5969; AfterStateHoliday -0.7329; BeforeStateHoliday 1.1848; Promo 1.1119; SchoolHoliday -0.4796; , TabularLine Store 1; DayOfWeek 4; Year 2015; Month 6; Day 18; StateHoliday False; CompetitionMonthsOpen 24; Promo2Weeks 0; StoreType c; Assortment a; PromoInterval #na#; CompetitionOpenSinceYear 2008; Promo2SinceYear 1900; State HE; Week 25; Events Rain; Promo_fw 2.0; Promo_bw 4.0; StateHoliday_fw 0.0; StateHoliday_bw 0.0; SchoolHoliday_fw 0.0; SchoolHoliday_bw 0.0; CompetitionDistance_na False; CloudCover_na False; CompetitionDistance -0.5358; Max_TemperatureC 0.8549; Mean_TemperatureC 1.0322; Min_TemperatureC 1.1756; Max_Humidity 0.8653; Mean_Humidity -0.6479; Min_Humidity -1.0487; Max_Wind_SpeedKm_h 0.3768; Mean_Wind_SpeedKm_h 0.1902; CloudCover 0.2552; trend 0.4066; trend_DE 0.5969; AfterStateHoliday -0.7645; BeforeStateHoliday 1.1848; Promo 1.1119; SchoolHoliday -0.4796; , TabularLine Store 2; DayOfWeek 4; Year 2015; Month 6; Day 18; StateHoliday False; CompetitionMonthsOpen 24; Promo2Weeks 25; StoreType a; Assortment a; PromoInterval Jan,Apr,Jul,Oct; CompetitionOpenSinceYear 2007; Promo2SinceYear 2010; State TH; Week 25; Events Rain; Promo_fw 2.0; Promo_bw 4.0; StateHoliday_fw 0.0; StateHoliday_bw 0.0; SchoolHoliday_fw 0.0; SchoolHoliday_bw 0.0; CompetitionDistance_na False; CloudCover_na False; CompetitionDistance -0.6255; Max_TemperatureC 0.6144; Mean_TemperatureC 0.8912; Min_TemperatureC 1.0179; Max_Humidity 0.8653; Mean_Humidity -0.1112; Min_Humidity -0.6413; Max_Wind_SpeedKm_h 0.4878; Mean_Wind_SpeedKm_h 0.3579; CloudCover 0.2552; trend -0.4997; trend_DE 0.5969; AfterStateHoliday -0.4486; BeforeStateHoliday 1.1848; Promo 1.1119; SchoolHoliday -0.4796; , TabularLine Store 3; DayOfWeek 4; Year 2015; Month 6; Day 18; StateHoliday False; CompetitionMonthsOpen 24; Promo2Weeks 25; StoreType a; Assortment a; PromoInterval Jan,Apr,Jul,Oct; CompetitionOpenSinceYear 2006; Promo2SinceYear 2011; State NW; Week 25; Events Rain; Promo_fw 2.0; Promo_bw 4.0; StateHoliday_fw 0.0; StateHoliday_bw 0.0; SchoolHoliday_fw 0.0; SchoolHoliday_bw 0.0; CompetitionDistance_na False; CloudCover_na False; CompetitionDistance 1.1122; Max_TemperatureC 0.7346; Mean_TemperatureC 1.0322; Min_TemperatureC 1.1756; Max_Humidity 0.8653; Mean_Humidity -0.4945; Min_Humidity -0.8959; Max_Wind_SpeedKm_h 0.7097; Mean_Wind_SpeedKm_h 0.3579; CloudCover 0.2552; trend 1.0410; trend_DE 0.5969; AfterStateHoliday -0.7645; BeforeStateHoliday 1.1848; Promo 1.1119; SchoolHoliday -0.4796; , TabularLine Store 4; DayOfWeek 4; Year 2015; Month 6; Day 18; StateHoliday False; CompetitionMonthsOpen 24; Promo2Weeks 0; StoreType c; Assortment c; PromoInterval #na#; CompetitionOpenSinceYear 2009; Promo2SinceYear 1900; State BE; Week 25; Events Rain; Promo_fw 2.0; Promo_bw 4.0; StateHoliday_fw 0.0; StateHoliday_bw 0.0; SchoolHoliday_fw 0.0; SchoolHoliday_bw 0.0; CompetitionDistance_na False; CloudCover_na False; CompetitionDistance -0.6191; Max_TemperatureC 0.8549; Mean_TemperatureC 1.0322; Min_TemperatureC 1.0179; Max_Humidity 0.8653; Mean_Humidity -0.4179; Min_Humidity -0.8450; Max_Wind_SpeedKm_h 0.1549; Mean_Wind_SpeedKm_h 0.3579; CloudCover 0.2552; trend -0.1372; trend_DE 0.5969; AfterStateHoliday -0.4486; BeforeStateHoliday 1.1848; Promo 1.1119; SchoolHoliday -0.4796; ]...\n", "Path: data/rossmann;\n", "\n", "Valid: LabelList\n", "y: FloatList (41395 items)\n", "[FloatItem 8.568457, FloatItem 8.710125, FloatItem 9.025696, FloatItem 9.546455, FloatItem 8.480944]...\n", "Path: data/rossmann\n", "x: TabularList (41395 items)\n", "[TabularLine Store 1; DayOfWeek 5; Year 2015; Month 7; Day 31; StateHoliday False; CompetitionMonthsOpen 24; Promo2Weeks 0; StoreType c; Assortment a; PromoInterval #na#; CompetitionOpenSinceYear 2008; Promo2SinceYear 1900; State HE; Week 31; Events Fog; Promo_fw 5.0; Promo_bw 5.0; StateHoliday_fw 0.0; StateHoliday_bw 0.0; SchoolHoliday_fw 7.0; SchoolHoliday_bw 5.0; CompetitionDistance_na False; CloudCover_na False; CompetitionDistance -0.5358; Max_TemperatureC 1.0954; Mean_TemperatureC 0.8912; Min_TemperatureC 0.3871; Max_Humidity 0.6029; Mean_Humidity -1.5678; Min_Humidity -1.6598; Max_Wind_SpeedKm_h 0.1549; Mean_Wind_SpeedKm_h -0.1452; CloudCover -2.8229; trend 1.8567; trend_DE 1.8939; AfterStateHoliday 0.5940; BeforeStateHoliday 1.1848; Promo 1.1119; SchoolHoliday 2.0852; , TabularLine Store 2; DayOfWeek 5; Year 2015; Month 7; Day 31; StateHoliday False; CompetitionMonthsOpen 24; Promo2Weeks 25; StoreType a; Assortment a; PromoInterval Jan,Apr,Jul,Oct; CompetitionOpenSinceYear 2007; Promo2SinceYear 2010; State TH; Week 31; Events Fog; Promo_fw 1.0; Promo_bw 5.0; StateHoliday_fw 0.0; StateHoliday_bw 0.0; SchoolHoliday_fw 1.0; SchoolHoliday_bw 5.0; CompetitionDistance_na False; CloudCover_na False; CompetitionDistance -0.6255; Max_TemperatureC 0.6144; Mean_TemperatureC 0.4683; Min_TemperatureC 0.2293; Max_Humidity 0.8653; Mean_Humidity -0.9545; Min_Humidity -1.3033; Max_Wind_SpeedKm_h -0.9548; Mean_Wind_SpeedKm_h -0.1452; CloudCover -0.9761; trend 1.4035; trend_DE 1.8939; AfterStateHoliday 0.9099; BeforeStateHoliday 1.1848; Promo 1.1119; SchoolHoliday 2.0852; , TabularLine Store 3; DayOfWeek 5; Year 2015; Month 7; Day 31; StateHoliday False; CompetitionMonthsOpen 24; Promo2Weeks 25; StoreType a; Assortment a; PromoInterval Jan,Apr,Jul,Oct; CompetitionOpenSinceYear 2006; Promo2SinceYear 2011; State NW; Week 31; Events Fog; Promo_fw 5.0; Promo_bw 5.0; StateHoliday_fw 0.0; StateHoliday_bw 0.0; SchoolHoliday_fw 5.0; SchoolHoliday_bw 5.0; CompetitionDistance_na False; CloudCover_na False; CompetitionDistance 1.1122; Max_TemperatureC 0.8549; Mean_TemperatureC 0.4683; Min_TemperatureC 0.0716; Max_Humidity 0.8653; Mean_Humidity -1.0312; Min_Humidity -1.3542; Max_Wind_SpeedKm_h -0.9548; Mean_Wind_SpeedKm_h -1.1514; CloudCover -2.2073; trend 1.9473; trend_DE 1.8939; AfterStateHoliday 0.5940; BeforeStateHoliday 1.1848; Promo 1.1119; SchoolHoliday 2.0852; , TabularLine Store 4; DayOfWeek 5; Year 2015; Month 7; Day 31; StateHoliday False; CompetitionMonthsOpen 24; Promo2Weeks 0; StoreType c; Assortment c; PromoInterval #na#; CompetitionOpenSinceYear 2009; Promo2SinceYear 1900; State BE; Week 31; Events #na#; Promo_fw 1.0; Promo_bw 5.0; StateHoliday_fw 0.0; StateHoliday_bw 0.0; SchoolHoliday_fw 1.0; SchoolHoliday_bw 5.0; CompetitionDistance_na False; CloudCover_na False; CompetitionDistance -0.6191; Max_TemperatureC 0.6144; Mean_TemperatureC 0.6092; Min_TemperatureC 0.5448; Max_Humidity 0.0780; Mean_Humidity -1.0312; Min_Humidity -1.0487; Max_Wind_SpeedKm_h 0.0439; Mean_Wind_SpeedKm_h 0.6933; CloudCover 0.2552; trend 0.8597; trend_DE 1.8939; AfterStateHoliday 0.9099; BeforeStateHoliday 1.1848; Promo 1.1119; SchoolHoliday 2.0852; , TabularLine Store 5; DayOfWeek 5; Year 2015; Month 7; Day 31; StateHoliday False; CompetitionMonthsOpen 3; Promo2Weeks 0; StoreType a; Assortment a; PromoInterval #na#; CompetitionOpenSinceYear 2015; Promo2SinceYear 1900; State SN; Week 31; Events #na#; Promo_fw 1.0; Promo_bw 5.0; StateHoliday_fw 0.0; StateHoliday_bw 0.0; SchoolHoliday_fw 1.0; SchoolHoliday_bw 5.0; CompetitionDistance_na False; CloudCover_na False; CompetitionDistance 3.1344; Max_TemperatureC 0.7346; Mean_TemperatureC 0.7502; Min_TemperatureC 0.7025; Max_Humidity -1.4966; Mean_Humidity -1.4912; Min_Humidity -1.2524; Max_Wind_SpeedKm_h -0.9548; Mean_Wind_SpeedKm_h -0.1452; CloudCover -0.9761; trend 1.5848; trend_DE 1.8939; AfterStateHoliday 0.5940; BeforeStateHoliday 1.1848; Promo 1.1119; SchoolHoliday 2.0852; ]...\n", "Path: data/rossmann;\n", "\n", "Test: None, model=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(26, 10)\n", " (7): Embedding(27, 10)\n", " (8): Embedding(5, 4)\n", " (9): Embedding(4, 3)\n", " (10): Embedding(4, 3)\n", " (11): Embedding(24, 9)\n", " (12): Embedding(9, 5)\n", " (13): Embedding(13, 7)\n", " (14): Embedding(53, 15)\n", " (15): Embedding(22, 9)\n", " (16): Embedding(7, 5)\n", " (17): Embedding(7, 5)\n", " (18): Embedding(4, 3)\n", " (19): Embedding(4, 3)\n", " (20): Embedding(9, 5)\n", " (21): Embedding(9, 5)\n", " (22): Embedding(3, 3)\n", " (23): Embedding(3, 3)\n", " )\n", " (emb_drop): Dropout(p=0.04)\n", " (bn_cont): BatchNorm1d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (layers): Sequential(\n", " (0): Linear(in_features=233, out_features=1000, bias=True)\n", " (1): ReLU(inplace)\n", " (2): BatchNorm1d(1000, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (3): Dropout(p=0.001)\n", " (4): Linear(in_features=1000, out_features=500, bias=True)\n", " (5): ReLU(inplace)\n", " (6): BatchNorm1d(500, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (7): Dropout(p=0.01)\n", " (8): Linear(in_features=500, out_features=1, bias=True)\n", " )\n", "), opt_func=functools.partial(, betas=(0.9, 0.99)), loss_func=, metrics=[], true_wd=True, bn_wd=True, wd=0.01, train_bn=True, path=PosixPath('data/rossmann'), model_dir='models', callback_fns=[], callbacks=[], layer_groups=[Sequential(\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(26, 10)\n", " (7): Embedding(27, 10)\n", " (8): Embedding(5, 4)\n", " (9): Embedding(4, 3)\n", " (10): Embedding(4, 3)\n", " (11): Embedding(24, 9)\n", " (12): Embedding(9, 5)\n", " (13): Embedding(13, 7)\n", " (14): Embedding(53, 15)\n", " (15): Embedding(22, 9)\n", " (16): Embedding(7, 5)\n", " (17): Embedding(7, 5)\n", " (18): Embedding(4, 3)\n", " (19): Embedding(4, 3)\n", " (20): Embedding(9, 5)\n", " (21): Embedding(9, 5)\n", " (22): Embedding(3, 3)\n", " (23): Embedding(3, 3)\n", " (24): Dropout(p=0.04)\n", " (25): BatchNorm1d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (26): Linear(in_features=233, out_features=1000, bias=True)\n", " (27): ReLU(inplace)\n", " (28): BatchNorm1d(1000, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (29): Dropout(p=0.001)\n", " (30): Linear(in_features=1000, out_features=500, bias=True)\n", " (31): BatchNorm1d(500, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", " (32): Dropout(p=0.01)\n", " (33): Linear(in_features=500, out_features=1, bias=True)\n", ")])" ] }, "execution_count": 132, "metadata": {}, "output_type": "execute_result" } ], "source": [ "learn.load('1')" ] }, { "cell_type": "code", "execution_count": 133, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Total time: 12:34

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_lossexp_rmspe
10.0125500.0123670.106852
20.0123580.0212460.111081
30.0115250.0149180.111002
40.0094610.0175710.111387
50.0090070.0172850.108684
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "learn.fit_one_cycle(5, 3e-4)" ] }, { "cell_type": "code", "execution_count": 134, "metadata": {}, "outputs": [ { "data": { "text/html": [ "Total time: 12:36

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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_lossexp_rmspe
10.0108180.0205550.116035
20.0116770.0155600.112247
30.0105270.0149820.119206
40.0110100.0177050.107552
50.0095230.0152040.112792
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "learn.fit_one_cycle(5, 3e-4)" ] }, { "cell_type": "code", "execution_count": 135, "metadata": {}, "outputs": [], "source": [ "learn.save('2')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(10th place in the competition was 0.108)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## fin" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.7" } }, "nbformat": 4, "nbformat_minor": 2 }