{"cells":[{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":162,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","collapsed":true,"trusted":true},"cell_type":"code","source":"import matplotlib.pyplot as plt\n%matplotlib inline\nimport seaborn as sns\nimport nltk\nimport gensim\nfrom gensim import *\nimport re\nfrom nltk.stem import WordNetLemmatizer\nimport os\nwnl = WordNetLemmatizer()\nfrom collections import defaultdict\nimport operator\nimport datetime\npd.set_option('display.max_columns', None)\npd.set_option('display.max_rows', None)\nfrom sklearn import model_selection\nimport xgboost as xgb","execution_count":74,"outputs":[]},{"metadata":{"_cell_guid":"a86e4051-5892-4e4e-b000-4b942020a20b","_uuid":"4de36a51a314239d1aa918b1137d2da79b261bf9","collapsed":true,"trusted":true},"cell_type":"code","source":"train = pd.read_csv('../input/train.csv', parse_dates=[\"activation_date\"])\ntest = pd.read_csv('../input/test.csv', parse_dates=[\"activation_date\"])","execution_count":75,"outputs":[]},{"metadata":{"_cell_guid":"364efa76-4b58-4c7d-abe8-6e640e4cf1bc","_uuid":"0e41f3fdd0473d0fac9edb4db716812b0bcee7ea"},"cell_type":"markdown","source":"Just how much data is there??"},{"metadata":{"_cell_guid":"f27978b9-8c74-4c45-9220-f39561d3d07f","_uuid":"7d2a7df61591cb21c78c240c619ac18fd3160956","trusted":true},"cell_type":"code","source":"train.shape, test.shape","execution_count":76,"outputs":[]},{"metadata":{"_cell_guid":"57b8aa08-c0d8-4e61-bd36-fff94eb3124e","_uuid":"c9c435eada4a5a33667606b7ce740a74b79f1860"},"cell_type":"markdown","source":"Around 1.5 million train dataset. Lets take a look at the data"},{"metadata":{"_cell_guid":"aab6e55a-3a5d-44ed-bc45-5500f120ecff","_uuid":"8c20116fe14d6bc29f458b3bc12226e9a533bad1","trusted":true},"cell_type":"code","source":"train.head()","execution_count":77,"outputs":[]},{"metadata":{"_cell_guid":"e518a342-4b14-4932-ae7c-11639f276f6d","_uuid":"07e9f969b739a6ad069625f195cbb38ea44a9175","trusted":true},"cell_type":"code","source":"test.head()","execution_count":78,"outputs":[]},{"metadata":{"_cell_guid":"f2b8f9cf-18ac-4326-bd66-8d21817bf637","_uuid":"d8112c30d2e93c7773cc07f5a57c2360dc5fc402"},"cell_type":"markdown","source":"Here is a bummer, the text data is in Russian"},{"metadata":{"_cell_guid":"e1f04ff8-7f64-4a23-8ed9-944a9880e1ef","_uuid":"254158969a84c15d32df0f72fe55329b3fdb4ea6","trusted":true},"cell_type":"code","source":"train.info()","execution_count":79,"outputs":[]},{"metadata":{"_cell_guid":"8fbe2f8a-bd87-4573-b2ac-6f1d61b17c46","_uuid":"025752bf59bf1ae52cbab5a49ac685c4969a809e","trusted":true},"cell_type":"code","source":"test.info()","execution_count":80,"outputs":[]},{"metadata":{"_cell_guid":"f11f98b7-ecce-4bfd-bd8a-d8e68de22b43","_uuid":"257628c9b5c171dd1e129695539d1d6d30333f44"},"cell_type":"markdown","source":"The problem statement is to predict the probability of a deal going through after an ad has been placed."},{"metadata":{"_cell_guid":"5ee85b76-401a-407d-a53b-b225b5b30c40","_uuid":"da46a385562b8a93a4bb86bb65a3392c30e2c136","collapsed":true,"trusted":true},"cell_type":"code","source":"#how many deal probability is over 0.5\ntrain['deal'] = 0\ntrain.loc[train['deal_probability']>0.5, 'deal'] = 1","execution_count":81,"outputs":[]},{"metadata":{"_cell_guid":"a376311e-ee63-44cf-b80c-b13208c985e6","_uuid":"16bff6b3f7cf99068b6ba50c512c8c48c5f02c36","trusted":true},"cell_type":"code","source":"train['deal'].value_counts(normalize = True)","execution_count":82,"outputs":[]},{"metadata":{"_cell_guid":"0dffd7f6-61fc-446e-a948-649e61cee626","_uuid":"4138e8957dd50a9beef5ffab44a19eebf587f565"},"cell_type":"markdown","source":"Around 11% of the deals have probability more than 0.5"},{"metadata":{"_cell_guid":"4eed672f-bd3d-4541-a177-6b3f2aa03803","_uuid":"75647fa1878d948c5e46e3eedd2c8fae7118b0b9","trusted":true},"cell_type":"code","source":"train['deal_probability'].describe()","execution_count":83,"outputs":[]},{"metadata":{"_cell_guid":"86c274c9-1a6b-498b-8628-cf64b013640d","_uuid":"59d722a7919124b46ddfb65c8850e54298d3df52","trusted":true},"cell_type":"code","source":"#histogram of the deal probability\nsns.distplot(train['deal_probability'])","execution_count":84,"outputs":[]},{"metadata":{"_cell_guid":"cb4624c4-7b6a-4871-af20-5db68486f342","_uuid":"2513ea5040c9fcfe67c8659e82b247306f63bc3d"},"cell_type":"markdown","source":"As expected  \n    1) Deviation from normal distribution  \n    2) positive skewness  \n    3) show peakedness  "},{"metadata":{"_cell_guid":"ec787dbc-247e-4889-bf21-5a9a0485eced","_uuid":"72ec16f6dc6835775dd89cb97c50d7f52aa3eeb3","trusted":true},"cell_type":"code","source":"#skewness and kurtosis\nprint(\"Skewness: %f\" % train['deal_probability'].skew())\nprint(\"Kurtosis: %f\" % train['deal_probability'].kurt())","execution_count":85,"outputs":[]},{"metadata":{"_cell_guid":"e2b9bca9-b139-4e1d-a01a-1f4a9a91ce64","_uuid":"458538c148a51bc6afdc117793d0e30599bf2966","trusted":true},"cell_type":"code","source":"# how many unique item id and user ids are there?\ntrain['item_id'].nunique(), train['user_id'].nunique()","execution_count":86,"outputs":[]},{"metadata":{"_cell_guid":"104feb1a-2e5e-4d18-b6fe-c65c444126d3","_uuid":"f6e017560f8d39b809d4c85bc6d112c103af83a7","trusted":true},"cell_type":"code","source":"# avergae no. of items posted by a user\ntrain['item_id'].nunique()/train['user_id'].nunique()","execution_count":87,"outputs":[]},{"metadata":{"_cell_guid":"8e9dfb0e-2767-4d96-98bf-7b69a9bf6eaf","_uuid":"a4e8abd6bc5771ac6ae865dbe3f687482a87a05c"},"cell_type":"markdown","source":"Around 2 items were posted by each user"},{"metadata":{"_cell_guid":"86385823-5d3b-42a5-83fc-79b3be31e5fb","_uuid":"5f2d5eac6812766a318725b452c60cda13e909a9","trusted":true},"cell_type":"code","source":"# categorical columns\ncat_cols = train.select_dtypes(include = ['O']).columns.values\ncat_cols","execution_count":88,"outputs":[]},{"metadata":{"_cell_guid":"d2149217-f5aa-48c4-a28a-92217dfcbfc2","_uuid":"e718d543d8a0984b7c113aa0932c1f7fe1a94fd3","scrolled":true,"trusted":true},"cell_type":"code","source":"# numerical columns\nnum_cols = train.select_dtypes(exclude = ['O']).columns.values\nnum_cols","execution_count":89,"outputs":[]},{"metadata":{"_cell_guid":"83dcb1f7-8008-4a7b-8584-f5fe00ef06ed","_uuid":"905145a9172603f0d9600b6eb684305374a697db"},"cell_type":"markdown","source":"Some observations:   \nThere are many more catgeorical variables than numerical variables. Out of the numerical features price, item seq number(ad sequence number for user) might be very helpful for building of the model."},{"metadata":{"_cell_guid":"be5fa6cd-d518-46ec-a267-efe167618cc4","_uuid":"6e504d8d6aa05c69deb27da0f4bb2bcef3814057"},"cell_type":"markdown","source":"Before proceeding any further lets see the range of activation dates of train and test dataset"},{"metadata":{"_cell_guid":"0ddfa2e8-4f4b-4d7f-8507-47b257550030","_uuid":"6880a227eb956355e57029afe518de26169e0777","trusted":true},"cell_type":"code","source":"type(train['activation_date'][0])","execution_count":90,"outputs":[]},{"metadata":{"_cell_guid":"95e0277c-e028-4ec1-9f82-2da620cfab95","_uuid":"215a3cf8b471d0f8cd05b81a5fd9ecdfa4cc9735","trusted":true},"cell_type":"code","source":"# range of activation date of train dataset\ntrain['activation_date'].min(), train['activation_date'].max()","execution_count":91,"outputs":[]},{"metadata":{"_cell_guid":"cd93cbda-6634-4031-ac65-7b74baa436c8","_uuid":"c71cb38b8ffb6ef37428315c5c00ba39dad5e5a1","trusted":true},"cell_type":"code","source":"# how many days of train dataset\ntrain['activation_date'].max() - train['activation_date'].min()","execution_count":92,"outputs":[]},{"metadata":{"_cell_guid":"2b11d862-0793-4ac2-ade0-ea29ef083756","_uuid":"41eed5071bc0e6b8a94915104159c9a42337c806","trusted":true},"cell_type":"code","source":"# range of activation date of test dataset\ntest['activation_date'].min(), test['activation_date'].max()","execution_count":93,"outputs":[]},{"metadata":{"_cell_guid":"fc152577-65f5-4048-858a-13d13137f066","_uuid":"6958ff1eaa6902ca77d45c7c11fe5c4bc91e68ee","trusted":true},"cell_type":"code","source":"# how many days of test dataset\ntest['activation_date'].max() - test['activation_date'].min()","execution_count":94,"outputs":[]},{"metadata":{"_cell_guid":"745b4dc5-ec49-4123-a38c-57076c6b3d37","_uuid":"4d097373bbb0b541ef7f45fe4dca84348ee04602"},"cell_type":"markdown","source":"One weekday of train dataset is repeating twice"},{"metadata":{"_cell_guid":"741dfc0a-e924-47e2-8dcd-7c299d429578","_uuid":"2d9ceedd60875060486269b87d7f40228680a597","collapsed":true,"trusted":true},"cell_type":"code","source":"train['activation_wd'] = train['activation_date'].dt.weekday\ntest['activation_wd'] = test['activation_date'].dt.weekday                                                             ","execution_count":95,"outputs":[]},{"metadata":{"_cell_guid":"7aa57767-9167-4d3c-8278-80d7acba7e6c","_uuid":"3cefbc8e8b90a2521b83460fd08f3ddbcd62d5e1","trusted":true},"cell_type":"code","source":"# lets see which weekday had most ads\ngrouped = train.groupby(['activation_wd'])['deal_probability'].mean().reset_index()\ngrouped.columns = ['activation_wd', 'deal_probability']\ngrouped","execution_count":96,"outputs":[]},{"metadata":{"_cell_guid":"ad19a418-4b9b-4128-b20f-a8b2e95d26f1","_uuid":"88770f727f7d7010a5ddd7839e193c3560b50b85"},"cell_type":"markdown","source":"More or less similar"},{"metadata":{"_cell_guid":"45d9d620-c54f-4113-952c-de0accf9c0de","_uuid":"af857ae1092edd629f29c1bf8247f1371f71ffdb","trusted":true},"cell_type":"code","source":"# how many regions and cities are there in train dataset\ntrain['region'].nunique(), train['city'].nunique()","execution_count":97,"outputs":[]},{"metadata":{"_cell_guid":"4e6a285c-fb8c-4ed8-87e2-7bee9d0c911d","_uuid":"0f34c8fff3e92fd0df23532c93496809069d564f","trusted":true},"cell_type":"code","source":"# how many regions and cities are there in test dataset\ntest['region'].nunique(), test['city'].nunique()","execution_count":98,"outputs":[]},{"metadata":{"_cell_guid":"11c3e37d-77ad-41ce-8c68-c51ba164d708","_uuid":"69708e73f2ad65a751403626f13cb5626aef3e80","collapsed":true,"trusted":true},"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder \nlbl = LabelEncoder()","execution_count":99,"outputs":[]},{"metadata":{"_cell_guid":"f9df334c-0104-40f8-afa6-7b306346260f","_uuid":"0dc9d0999e636e2d82e9ccaf861d6def84b20d75","collapsed":true,"trusted":true},"cell_type":"code","source":"# since all the information regarding region and city is categorical and is in Russian, we will label encode them\ncols = ['region', 'city']\nfor col in cols:\n    lbl.fit(list(train[col].values) + list(test[col].values))\n    train[col] = lbl.transform(train[col])\n    test[col] = lbl.transform(test[col])","execution_count":100,"outputs":[]},{"metadata":{"_cell_guid":"b4eeda2a-8f89-443b-8ed3-b7550a9c60f8","_uuid":"1cfe92dfb9e465930b509062b72b2cee64972a84","trusted":true},"cell_type":"code","source":"#lets see the relationship of a region with the probability\ngrouped = train.groupby(['region'])['deal_probability'].mean().reset_index()\ngrouped.columns = ['region', 'region_probability']\nplt.rcParams['figure.figsize'] = [15, 4]\nplt.xticks(rotation=90)\nsns.barplot(x = 'region', y = 'region_probability', data = grouped)","execution_count":101,"outputs":[]},{"metadata":{"_cell_guid":"33c7ede1-8cdc-495a-9ca0-292972c43e03","_uuid":"94fb37a717f48662104c2e98c77ea1056fdbc388","trusted":true},"cell_type":"code","source":"# lets see the relationship of a city with the probability\n# Since there are so many levels of a city we wont be able to plot its barplot\n# we will have to deal with it in a different way\ngrouped_1 = train.groupby(['city'])['deal_probability'].mean().reset_index()\ngrouped_2 = train.groupby(['city']).size().reset_index()\ngrouped_2.columns = ['city', 'count']\ngrouped = pd.merge(grouped_1, grouped_2, on = 'city', how = 'inner')\ngrouped = grouped.sort_values(by = \"deal_probability\", ascending = False)\ngrouped.head()","execution_count":102,"outputs":[]},{"metadata":{"_cell_guid":"4a8fe47e-c0ad-42d5-961f-6f0e478087cc","_uuid":"f2eb92e740d1bae74c01a185d8357561a0f81b6c","trusted":true},"cell_type":"code","source":"# info about the city feature\ngrouped.describe()","execution_count":103,"outputs":[]},{"metadata":{"_cell_guid":"7a5c6bb7-65c0-41a8-9890-4ab82e41a7b8","_uuid":"6b17c33a057212c2e78c36da0d554088d2d009f5","trusted":true},"cell_type":"code","source":"plt.xlim(0, 500)\nsns.regplot(x = 'count', y = 'deal_probability', data = grouped)","execution_count":104,"outputs":[]},{"metadata":{"_cell_guid":"251b76e5-ec21-49e6-b793-212cc9ba111c","_uuid":"0a8e4ede3d89d3a249661392031c6191c2141a3b"},"cell_type":"markdown","source":"Normally the standard deviation for a city is much higher when it is not that popular in the ad postings"},{"metadata":{"_cell_guid":"5b20021e-bc0a-4086-a670-984d65ff00e0","_uuid":"f20a4765341ad1c8279b1e6e9007420865d51ef0","scrolled":true,"trusted":true},"cell_type":"code","source":"# city and date together\ngrouped_1 = train.groupby(['activation_date', 'city']).size().reset_index()\ngrouped_1.columns = ['activation_date', 'city', 'city_daily_ads']\ngrouped_2 = train.groupby(['activation_date', 'city'])['deal_probability'].mean().reset_index()\ngrouped_2.columns = ['activation_date', 'city', 'deal_probability']\ngrouped = pd.merge(grouped_1, grouped_2, on = ['activation_date', 'city'], how = 'inner')\ngrouped = grouped.sort_values(by = \"deal_probability\", ascending = False)\n\ndel grouped_1, grouped_2\ngrouped.head()","execution_count":105,"outputs":[]},{"metadata":{"_cell_guid":"098548d6-dbe1-4d52-9509-500f900ecccf","_uuid":"a0b69d755c35e8c88f2201bce9e90e874db6a686","trusted":true},"cell_type":"code","source":"grouped['deal'] = 0\ngrouped.loc[grouped['deal_probability']>0.5, 'deal'] = 1\ngrouped.head()","execution_count":106,"outputs":[]},{"metadata":{"_cell_guid":"37ee3c68-b9fb-4e4d-a3b8-2b6c05aa5aa9","_uuid":"c876ddf8b99fd126cb340872fb55576a3a5611cb","trusted":true},"cell_type":"code","source":"sns.barplot(x = 'deal', y = 'city_daily_ads', data = grouped)","execution_count":107,"outputs":[]},{"metadata":{"_cell_guid":"cbeea615-7e91-4b93-ba67-8ff6b48957bd","_uuid":"8d2bdb776cefc4889a4f6be69bb43daea845f284","collapsed":true,"trusted":true},"cell_type":"code","source":"train = pd.merge(train, grouped[['activation_date', 'city', 'city_daily_ads']], on = ['activation_date', 'city'], how = 'inner')","execution_count":108,"outputs":[]},{"metadata":{"_cell_guid":"4eb4c75c-d1f2-4e62-80ba-aa28c8f62188","_uuid":"ee26cb82ead07e297f244aa8436184a97e1a813b","collapsed":true,"trusted":true},"cell_type":"code","source":"features_to_use = ['city_daily_ads']","execution_count":109,"outputs":[]},{"metadata":{"_cell_guid":"b2c0c1b4-e5fc-43d6-948a-abced0cb8368","_uuid":"a0f9775d22e343444893654595573cbcae628fa5","collapsed":true,"scrolled":true,"trusted":true},"cell_type":"code","source":"grouped = test.groupby(['activation_date', 'city']).size().reset_index()\ngrouped.columns = ['activation_date', 'city', 'city_daily_ads']\ntest = pd.merge(test, grouped[['activation_date', 'city', 'city_daily_ads']], on = ['activation_date', 'city'], how = 'inner')","execution_count":110,"outputs":[]},{"metadata":{"_cell_guid":"ba0efabb-a235-4763-a4ea-f2940b066470","_uuid":"e4743b4a179dc11ee09836a4d0bd85ba7b16f474"},"cell_type":"markdown","source":"### Parent category and category"},{"metadata":{"_cell_guid":"5b65086f-70b2-476f-bd97-c51fe949182b","_uuid":"bf52a5d83160ec3945bd717e262e57b7a03c7b66","collapsed":true,"trusted":true},"cell_type":"code","source":"# lets label encode parent category name and category name\ncols = ['parent_category_name', 'category_name']\nfor col in cols:\n    lbl.fit(list(train[col].values) + list(test[col].values))\n    train[col] = lbl.transform(train[col])\n    test[col] = lbl.transform(test[col])","execution_count":111,"outputs":[]},{"metadata":{"_cell_guid":"48f82fab-f77a-4c6e-8389-aac3dbd28763","_uuid":"dc20b3f3b3203ee4088144fe1346f8c8f42ae22a","trusted":true},"cell_type":"code","source":"# number of unique values in parent category name and category name\ntrain['parent_category_name'].nunique(), train['category_name'].nunique()","execution_count":112,"outputs":[]},{"metadata":{"_cell_guid":"7709c8f0-5826-4794-b3d0-3f52899e372e","_uuid":"22c9101fff734978b37efc72e208398e5b735b44","trusted":true},"cell_type":"code","source":"sns.barplot(x = 'parent_category_name', y = 'deal_probability', data = train)","execution_count":113,"outputs":[]},{"metadata":{"_cell_guid":"d298d654-cb14-4f13-a1ca-3a0eb2ff1562","_uuid":"8020a8a7cbd2d46bb75ca13e7d233944ff19f807","scrolled":true,"trusted":true},"cell_type":"code","source":"# lets see the distribution of each parent category name\nsns.countplot(x = 'parent_category_name', data = train)","execution_count":114,"outputs":[]},{"metadata":{"_cell_guid":"542c8d99-3b0f-46a9-ab19-a6752ac971c2","_uuid":"f9a56cfc6823a68055f68b2658762cd6ba448da0"},"cell_type":"markdown","source":"Parent category name 4 is dominating the ad postings and its deal probability is less compared to other parent categories"},{"metadata":{"_cell_guid":"528872f7-6965-488f-b120-d76e8296ffd7","_uuid":"9a0b51d34ed992c2746f10786c0d6b7bd9fca6f7","collapsed":true,"trusted":true},"cell_type":"code","source":"train['parent_category_4'] = 0\ntrain.loc[train['parent_category_name']==4, 'parent_category_4'] = 1","execution_count":115,"outputs":[]},{"metadata":{"_cell_guid":"43c4c1ce-f316-46ce-8413-80e7a458b766","_uuid":"dc4acd3f0b5318b99b84cab31e116b9bd4c2c242","trusted":true},"cell_type":"code","source":"plt.rcParams['figure.figsize'] = [12, 4]\nsns.barplot(x = 'parent_category_4', y = 'deal_probability', data = train)","execution_count":116,"outputs":[]},{"metadata":{"_cell_guid":"13cd7ea7-58b1-419d-b56d-28ab539fc406","_uuid":"e1b04859160b2b4062430d95a803108b3fef9653","collapsed":true,"trusted":true},"cell_type":"code","source":"test['parent_category_4'] = 0\ntest.loc[train['parent_category_name']==4, 'parent_category_4'] = 1","execution_count":117,"outputs":[]},{"metadata":{"_cell_guid":"4de188cb-c5c5-4954-b1f1-6d4873985b47","_uuid":"1565f4bc5f6bc2cfd5cdf3a0e295c2d36051d4e9","collapsed":true,"trusted":true},"cell_type":"code","source":"features_to_use.append('parent_category_4')","execution_count":118,"outputs":[]},{"metadata":{"_cell_guid":"a25f9c4e-f8ec-4323-aaf6-ef0b1919ddb2","_uuid":"2ae11d6d5d08d36078d7303da377827d14a6c901","collapsed":true,"trusted":true},"cell_type":"code","source":"param = {}\nparam['objective'] = 'reg:logistic'\nparam['eta'] = 0.1\nparam['max_depth'] = 7\nparam['silent'] = 0\nparam['eval_metric'] = \"rmse\"\nparam['min_child_weight'] = 6\nparam['subsample'] = 0.7\nparam['colsample_bytree'] = 0.7\nparam['seed'] = 0\nnum_rounds = 500","execution_count":119,"outputs":[]},{"metadata":{"_cell_guid":"8c25aec7-384b-4b59-99f4-8c16aa975987","_uuid":"a5d24776bd1220c285bdf88bbe6149a7ae6c2fe0","trusted":true},"cell_type":"code","source":"train_X = np.array(train[features_to_use])\ntrain_y = np.array(train['deal_probability'])\n\nX_tr, X_va, y_tr, y_va = model_selection.train_test_split(train_X, train_y, test_size=0.2, random_state=2018)\n\ntr_data = xgb.DMatrix(X_tr, y_tr)\nva_data = xgb.DMatrix(X_va, y_va)\n\nwatchlist = [(tr_data, 'train'), (va_data, 'valid')]\n\nmodel = xgb.train(param, tr_data, 1000, watchlist, maximize=False, early_stopping_rounds = 25, verbose_eval=25)\n","execution_count":120,"outputs":[]},{"metadata":{"_cell_guid":"5c5dbebc-131a-4bd9-9513-6c700fc3e4ef","_uuid":"f6d93f55bb9d53defa0ccb921466059ad0822947"},"cell_type":"markdown","source":"### Title and Description"},{"metadata":{"_cell_guid":"7fc036f3-25d1-41bc-abf3-c48a3eb6e550","_uuid":"46f0a0d27a11b752e82f752d42d96fb5e08391af","trusted":true},"cell_type":"code","source":"train['title'].head()","execution_count":121,"outputs":[]},{"metadata":{"_cell_guid":"828af9b6-2520-442d-8475-0385976074bc","_uuid":"2405b053a65fee751d13d2e1e7fd3434e52751a6","trusted":true},"cell_type":"code","source":"def get_number_of_chars(text):\n    return (len(text))\nget_number_of_chars(train['title'][0])","execution_count":122,"outputs":[]},{"metadata":{"_cell_guid":"0a9d6b9c-7406-4fcc-8ddc-8f2cdd2bfcfa","_uuid":"868c14f395235f72053bd075704ecf70c5f27359","collapsed":true,"trusted":true},"cell_type":"code","source":"train['title_chars_count'] = train['title'].apply(lambda x: get_number_of_chars(x))\ntest['title_chars_count'] = test['title'].apply(lambda x: get_number_of_chars(x))","execution_count":123,"outputs":[]},{"metadata":{"_cell_guid":"ab7eea3e-978a-4115-a179-e40980afbf4a","_uuid":"3000702d6f2021da72df5a44fff205f0c2e71c9e","trusted":true},"cell_type":"code","source":"train['title_chars_count'].min(), train['title_chars_count'].max()","execution_count":124,"outputs":[]},{"metadata":{"_cell_guid":"77641803-1701-4a1d-b32a-a9c0949ce73a","_uuid":"5311881a10223e8d745438e0c68a086c314299f3","trusted":true},"cell_type":"code","source":"plt.rcParams['figure.figsize'] = [22, 4]\nsns.barplot(x = 'title_chars_count', y = 'deal_probability', data = train)","execution_count":125,"outputs":[]},{"metadata":{"_cell_guid":"63e861db-521f-4f1c-b299-7975c950acb2","_uuid":"92f9ef903aadda4c1416c6ff0167a7ab57a50993","trusted":true},"cell_type":"code","source":"sns.countplot(x = 'title_chars_count', data = train)","execution_count":126,"outputs":[]},{"metadata":{"_cell_guid":"bc834eb7-fe64-46d7-8ee5-3598872662dc","_uuid":"440aabf79ab53cf76b8b9c48b4b6394df1674797"},"cell_type":"markdown","source":"title_chars_count containing so many levels do not make much sense. we will bucket them in ranges of 10"},{"metadata":{"_cell_guid":"19064496-0a06-4d5a-869e-7975a55b8152","_uuid":"c6488096d256f0de264a20d0735751ca6bf2bc78","collapsed":true,"trusted":true},"cell_type":"code","source":"train['title_chars_count_bucket'] = train['title_chars_count'].apply(lambda x:np.floor(x/10)+1)\ntest['title_chars_count_bucket'] = test['title_chars_count'].apply(lambda x:np.floor(x/10)+1)","execution_count":127,"outputs":[]},{"metadata":{"_cell_guid":"ba527e0e-31c3-4525-9b10-2ffdcc3b0a0f","_uuid":"4c483df0000868be1ab739f32ebcc1e5a0176f5e","trusted":true},"cell_type":"code","source":"sns.barplot(x = 'title_chars_count_bucket', y = 'deal_probability', data = train)","execution_count":128,"outputs":[]},{"metadata":{"_cell_guid":"41647b39-fa27-44e4-b4b8-627467910d82","_uuid":"d0b3475b1ecb71bdc9e85594dab87cc7b69e2c29","collapsed":true,"trusted":true},"cell_type":"code","source":"features_to_use.append('title_chars_count')","execution_count":129,"outputs":[]},{"metadata":{"_cell_guid":"88bad0c6-dbc7-49ee-94de-a2fead6f4ee3","_uuid":"b68c17fc6b9ca0516ae7ca5138e2311e7d47434a","trusted":true},"cell_type":"code","source":"train_X = np.array(train[features_to_use])\ntrain_y = np.array(train['deal_probability'])\n\nX_tr, X_va, y_tr, y_va = model_selection.train_test_split(train_X, train_y, test_size=0.2, random_state=2018)\n\ntr_data = xgb.DMatrix(X_tr, y_tr)\nva_data = xgb.DMatrix(X_va, y_va)\n\nwatchlist = [(tr_data, 'train'), (va_data, 'valid')]\n\nmodel = xgb.train(param, tr_data, 1000, watchlist, maximize=False, early_stopping_rounds = 25, verbose_eval=25)\n","execution_count":130,"outputs":[]},{"metadata":{"_cell_guid":"bf1438e4-deb3-4a4e-b38e-254c6f4d0d0e","_uuid":"49d135355b88d12f47b0293a06b61e7cf7ce9c0d","trusted":true},"cell_type":"code","source":"train['description'].head()","execution_count":131,"outputs":[]},{"metadata":{"_cell_guid":"856404b2-d8cd-4e7f-a426-ebfcf0485da6","_uuid":"0ae2cf78e1dc1ec531a0291578a2a94f6e6ab54d","collapsed":true,"trusted":true},"cell_type":"code","source":"def get_number_of_words(text):\n    return len(str(text).split())\n\ntrain['description_words_count'] = train['description'].apply(lambda x: get_number_of_words(x))\ntest['description_words_count'] = test['description'].apply(lambda x: get_number_of_words(x))","execution_count":132,"outputs":[]},{"metadata":{"_cell_guid":"33abeb77-f6a6-4511-8d5b-91e0f00c3aeb","_uuid":"40d5475f3c0ee68d10aa5049ce7947a0ac2b1324","trusted":true},"cell_type":"code","source":"train['description_words_count'].min(), train['description_words_count'].max()","execution_count":133,"outputs":[]},{"metadata":{"_cell_guid":"e1f164bb-a61e-4ac5-bef5-b240b917f913","_uuid":"f5e3c2af2266bc2129fcdc5e321c91245decf599","collapsed":true,"trusted":true},"cell_type":"code","source":"train['description_words_count_bucket'] = train['description_words_count'].apply(lambda x:np.floor(x/100)+1)\ntest['description_words_count_bucket'] = test['description_words_count'].apply(lambda x:np.floor(x/100)+1)","execution_count":134,"outputs":[]},{"metadata":{"_cell_guid":"4b6abc35-ba02-4b26-89bc-d4201e3fc22d","_uuid":"79c265f9523e4dbe4ca03e29ba20cfdf398f0ce2","trusted":true},"cell_type":"code","source":"sns.barplot(x = 'description_words_count_bucket', y = 'deal_probability', data = train)","execution_count":135,"outputs":[]},{"metadata":{"_cell_guid":"d51c4807-2367-4cf9-b491-514c0b721bbc","_uuid":"bb61363eb832dfb2eb51234bc47b8627c0098e4f","trusted":true},"cell_type":"code","source":"sns.countplot(train['description_words_count_bucket'])","execution_count":136,"outputs":[]},{"metadata":{"_cell_guid":"f336195a-d488-43e2-8096-9132749d3e63","_uuid":"da74772d76b46a8a44a1dbb1c123937627d2a799","collapsed":true,"trusted":true},"cell_type":"code","source":"features_to_use.append('description_words_count')","execution_count":137,"outputs":[]},{"metadata":{"_cell_guid":"32da3e70-85f7-425c-82d1-90ed1798bac6","_uuid":"dbf211af9e0b4f78026bb5a575a12dc9abbeed05","trusted":true},"cell_type":"code","source":"len(features_to_use)","execution_count":138,"outputs":[]},{"metadata":{"_cell_guid":"8ef8509d-634a-4a48-ad87-ed7654879b52","_uuid":"ff15f29a2b04edfd65ddaaa94e669b9d2d0de35d","trusted":true},"cell_type":"code","source":"features_to_use","execution_count":139,"outputs":[]},{"metadata":{"_cell_guid":"fdfa5ad4-4280-42e2-a6fc-d8d984d617e7","_uuid":"dba0a17684070699c259fe1762509c978fe9ab43","trusted":true},"cell_type":"code","source":"train_X = np.array(train[features_to_use])\ntrain_y = np.array(train['deal_probability'])\n\nX_tr, X_va, y_tr, y_va = model_selection.train_test_split(train_X, train_y, test_size=0.2, random_state=2018)\n\ntr_data = xgb.DMatrix(X_tr, y_tr)\nva_data = xgb.DMatrix(X_va, y_va)\n\nwatchlist = [(tr_data, 'train'), (va_data, 'valid')]\n\nmodel = xgb.train(param, tr_data, 1000, watchlist, maximize=False, early_stopping_rounds = 25, verbose_eval=25)\n","execution_count":140,"outputs":[]},{"metadata":{"_cell_guid":"dc8ae012-c3ed-492a-987e-a0f151222f72","_uuid":"e3fcbf77e85e2b4ec4971301de4a223dbe6913a8"},"cell_type":"markdown","source":"### We have come to a very important feature price. Lets see what we can do"},{"metadata":{"_cell_guid":"a7cb831f-ae87-4ecc-b97a-ab5a20076737","_uuid":"4507959cf7594e5c5e9352713b6d61a89f56e938","collapsed":true,"trusted":true},"cell_type":"code","source":"train['price_present'] = 0\ntrain.loc[train['price'].isnull(), 'price_present'] = 1\ntest['price_present'] = 0\ntest.loc[train['price'].isnull(), 'price_present'] = 1","execution_count":141,"outputs":[]},{"metadata":{"_cell_guid":"463a4441-b28f-46d0-b03d-745491375046","_uuid":"0801a97af51d27bc2e2df2818c97911fdf040444","trusted":true},"cell_type":"code","source":"sns.barplot(x = 'price_present', y = 'deal_probability', data = train)","execution_count":142,"outputs":[]},{"metadata":{"_cell_guid":"3aea2b62-c05e-43eb-83f2-d63179a9f4f8","_uuid":"11fb2a21c37df833d032b00f57ebf733f4d3ec3f","trusted":true},"cell_type":"code","source":"# histogram of price\nsns.distplot(train[train['price'].notnull()]['price'])","execution_count":143,"outputs":[]},{"metadata":{"_cell_guid":"36465524-5327-4697-acca-d9ce120dca15","_uuid":"7b57be133e499007286ba33201c6dc58662556ce"},"cell_type":"markdown","source":"The price feature has a long right tail. The mean is quite high than the median"},{"metadata":{"_cell_guid":"70c409cf-2f57-4093-bbbd-2b259d481d10","_uuid":"e3c1495c5e64433bcf4afe42f4c0d3e6155f4d88","trusted":true},"cell_type":"code","source":"train['price'].describe()","execution_count":144,"outputs":[]},{"metadata":{"_cell_guid":"d890956d-bf62-4ca1-b9fb-78fde1dd5a23","_uuid":"c4828bedca3c7d81d0481b0816d7d7b80497ddbf","collapsed":true,"trusted":true},"cell_type":"code","source":"# lets break the price feature into buckets in steps of 25%\n\ntrain['price_bucket'] = 0\ntrain.loc[(train['price']>=500)&(train['price']<1300), 'price_bucket'] = 1\ntrain.loc[(train['price']>=1300)&(train['price']<7000), 'price_bucket'] = 2\ntrain.loc[train['price']>=7000, 'price_bucket'] = 3\ntrain.loc[train['price'].isnull(), 'price_bucket'] = 4\n\ntest['price_bucket'] = 0\ntest.loc[(test['price']>=500)&(test['price']<1300), 'price_bucket'] = 1\ntest.loc[(test['price']>=1300)&(test['price']<7000), 'price_bucket'] = 2\ntest.loc[test['price']>=7000, 'price_bucket'] = 3\ntest.loc[test['price'].isnull(), 'price_bucket'] = 4","execution_count":145,"outputs":[]},{"metadata":{"_cell_guid":"3005724f-39e9-46f8-92bb-bd9715bfa33a","_uuid":"300d85a3aae4a3be967ef326d95462cccd7074d7","trusted":true},"cell_type":"code","source":"sns.barplot(x = 'price_bucket', y = 'deal_probability', data = train)","execution_count":146,"outputs":[]},{"metadata":{"_cell_guid":"9383eb91-c69d-4a59-8ff9-3f5ca3239f80","_uuid":"59967d56fdec713a4aa5858e76ca469be3da1c78"},"cell_type":"markdown","source":"So price has a significant effect on deal probability"},{"metadata":{"_cell_guid":"2bb3e45c-474d-4be8-8328-248fca0fc7e2","_uuid":"bdabd26ac00035ee5a0ca771693c6ead5df9fc93","collapsed":true,"trusted":true},"cell_type":"code","source":"features_to_use.append('price')","execution_count":147,"outputs":[]},{"metadata":{"_cell_guid":"c1c7f53e-5bc1-46fe-98fd-2ec150091198","_uuid":"142ac1eaaedfa1dd8115e8a0e2650cbb1fd6dfd9","trusted":true},"cell_type":"code","source":"features_to_use","execution_count":148,"outputs":[]},{"metadata":{"_cell_guid":"409f5d8b-ce49-4376-b026-5d5b324f5e4d","_uuid":"7a7c8623aec6dd8ce3182326307ae54613fcb19f","collapsed":true,"trusted":true},"cell_type":"code","source":"train.loc[train['price'].isnull(), 'price'] = -999\ntest.loc[test['price'].isnull(), 'price'] = -999","execution_count":149,"outputs":[]},{"metadata":{"_cell_guid":"1a914010-2ee3-49fe-9308-5f5d6388b929","_uuid":"4fe2a1c41cee5d46c2fb69a8658f012c4da59209","trusted":true},"cell_type":"code","source":"train_X = np.array(train[features_to_use])\ntrain_y = np.array(train['deal_probability'])\n\nX_tr, X_va, y_tr, y_va = model_selection.train_test_split(train_X, train_y, test_size=0.2, random_state=2018)\n\ntr_data = xgb.DMatrix(X_tr, y_tr)\nva_data = xgb.DMatrix(X_va, y_va)\n\nwatchlist = [(tr_data, 'train'), (va_data, 'valid')]\n\nmodel = xgb.train(param, tr_data, 1000, watchlist, maximize=False, early_stopping_rounds = 25, verbose_eval=25)\n","execution_count":150,"outputs":[]},{"metadata":{"_cell_guid":"141128e7-f851-4ba0-be78-033c9c50de45","_uuid":"32cb171c14746b49fd605e2dff2d1b24eff332d0","trusted":true},"cell_type":"code","source":"train['item_seq_number'].min(), train['item_seq_number'].max()","execution_count":151,"outputs":[]},{"metadata":{"_cell_guid":"606236ae-0093-4ed6-83f9-ef057caafde2","_uuid":"1703da432cc5b5472e25ec6dbc27e20a97162cfe","trusted":true},"cell_type":"code","source":"train['item_seq_number'].describe()","execution_count":152,"outputs":[]},{"metadata":{"_cell_guid":"891f9fb9-03a0-4a07-a571-a94635cb68d2","_uuid":"b2d8d8cef08866f8e0607e886a91278f2b192681","trusted":true},"cell_type":"code","source":"sns.barplot(x = 'deal', y = 'item_seq_number', data = train)","execution_count":153,"outputs":[]},{"metadata":{"_cell_guid":"bc4d3c97-d66f-4a02-a5c8-9f43766ad1d1","_uuid":"a5637f14fe071a9bf4236e388c4bdb4eb26babee","collapsed":true,"trusted":true},"cell_type":"code","source":"features_to_use.append('item_seq_number')","execution_count":154,"outputs":[]},{"metadata":{"_cell_guid":"64ca91e1-10a0-44f2-96e9-df5bd2de80d2","_uuid":"aef6b7ee2c759e1f234710a40c29f2e4c6c81910","trusted":true},"cell_type":"code","source":"# histogram of item seq number\nsns.distplot(train['item_seq_number'])","execution_count":157,"outputs":[]},{"metadata":{"_cell_guid":"7d3abb3a-8e94-4589-8746-2897aabe0012","_uuid":"3a9f21d4bb34bf0537626396fbdbeaffc9e22922","trusted":true},"cell_type":"code","source":"features_to_use","execution_count":158,"outputs":[]},{"metadata":{"_cell_guid":"aef675ca-a199-4cfd-8e50-ed7f432c2324","_uuid":"b5bd52f2fc96419665f9ea348d0f50687ca6307c","trusted":true},"cell_type":"code","source":"train_X = np.array(train[features_to_use])\ntrain_y = np.array(train['deal_probability'])\n\nX_tr, X_va, y_tr, y_va = model_selection.train_test_split(train_X, train_y, test_size=0.2, random_state=2018)\n\ntr_data = xgb.DMatrix(X_tr, y_tr)\nva_data = xgb.DMatrix(X_va, y_va)\n\nwatchlist = [(tr_data, 'train'), (va_data, 'valid')]\n\nmodel = xgb.train(param, tr_data, 1000, watchlist, maximize=False, early_stopping_rounds = 25, verbose_eval=25)","execution_count":159,"outputs":[]},{"metadata":{"_cell_guid":"2b97cb70-ac3e-4c3e-9dd8-0d4754fbab9b","_uuid":"56fc5c93dcb9f073d001a0c6bd7d5c515470e751","collapsed":true,"trusted":true},"cell_type":"code","source":"test_X = np.array(test[features_to_use])","execution_count":160,"outputs":[]},{"metadata":{"_cell_guid":"fdfccbf2-fcc4-4867-8f22-048691dd734b","_uuid":"18b0b70cdb125836283bb045dd7e9447d0be645c","trusted":true},"cell_type":"code","source":"X_te = xgb.DMatrix(test_X)\ny_pred = model.predict(X_te)\nsub = pd.read_csv('../input/sample_submission.csv')\nsub['deal_probability'] = y_pred\nsub['deal_probability'].clip(0.0, 1.0, inplace=True)\nsub.to_csv('xgb_with_basic_features.csv', index=False)\nsub.head()","execution_count":161,"outputs":[]},{"metadata":{"_cell_guid":"33b5d42a-55ba-4743-b2d4-63cfd5c9a767","_uuid":"b01900e9399d6eb5617727fddba306b9989d10ae","collapsed":true},"cell_type":"raw","source":"train['user_type'].head()"},{"metadata":{"_cell_guid":"8fc4f92d-7ee3-4517-9c32-aa50040a3399","_uuid":"18ec8b7423f64d0d9c5d0e55a7ac97403c96acfd","collapsed":true},"cell_type":"raw","source":"train['user_type'].nunique()"},{"metadata":{"_cell_guid":"8d5b0473-32bb-49c1-8cd4-21f9a57f3886","_uuid":"e46675c76fdbd3d0f3dd46cd87ad5927f8c5f3c5","collapsed":true},"cell_type":"raw","source":"sns.barplot(x = 'user_type', y = 'deal_probability', data = train)"},{"metadata":{"_cell_guid":"1507719f-9bc2-4a65-aef1-0c8352cdc1f4","_uuid":"f28b4af9b6ab5c2099b943ed9dd28dc161c30e60","collapsed":true},"cell_type":"raw","source":"features_to_use.append('user_type')"},{"metadata":{"_cell_guid":"262451bf-fbc3-4964-a821-7f06425866e1","_uuid":"27c0080a8f6e60c681bf957c09ab775117442a8b","collapsed":true},"cell_type":"raw","source":"train['image'].head()"},{"metadata":{"_cell_guid":"acfca0d1-1666-4077-9e64-cf22f54492db","_uuid":"6da1723b8ecc994f41c271469ad65cd74de23bd1","collapsed":true},"cell_type":"raw","source":"train['image_present'] = 1\ntrain.loc[train['image'].isnull(), 'image_present'] = 0\ntest['image_present'] = 1\ntest.loc[train['image'].isnull(), 'image_present'] = 0"},{"metadata":{"_cell_guid":"daefec8f-d204-4d92-b71f-0efaf8d74714","_uuid":"3fb7ee148026d617e57e50da5a8f2a8fb0b99429","collapsed":true},"cell_type":"raw","source":"train['image_present'].value_counts()"},{"metadata":{"_cell_guid":"9bae5d2a-273f-4ebf-9e0c-370eb5f0c294","_uuid":"c3edf1837772651b1d8218e042c6a533369df6f9","collapsed":true},"cell_type":"raw","source":"features_to_use.append('image_present')"},{"metadata":{"_cell_guid":"f2961d63-4f10-446c-b686-35aadc94628d","_uuid":"969779ed3b083e95dd056911d7916858f04ad113","collapsed":true},"cell_type":"raw","source":"len(features_to_use)"},{"metadata":{"_cell_guid":"150d04c1-74e5-49ae-9fa2-e48dd995ef69","_uuid":"dcbe61597a5f77afc19a39b3ac9face5c657ed4a","collapsed":true},"cell_type":"raw","source":"features_to_use"},{"metadata":{"_cell_guid":"75b07d8b-7ea7-49af-b1ff-09200cd7d9b5","_uuid":"7e7cb268a61b73b5c3b4912dcf421c4739fceeed","collapsed":true},"cell_type":"raw","source":"train[features_to_use].info()"},{"metadata":{"_cell_guid":"1f5ea8dc-1149-4b66-83d2-6c66c0a4a165","_uuid":"362d21d780a00a856db9c82dc80242299893e974","collapsed":true},"cell_type":"raw","source":"test[features_to_use].info()"},{"metadata":{"_cell_guid":"aa79b88b-d8bf-462c-8ba7-c5129661ee88","_uuid":"d4b21bcb43278334b338beb21062e3397dd83578","collapsed":true},"cell_type":"raw","source":"train.loc[train['price'].isnull(), 'price'] = -999\ntest.loc[test['price'].isnull(), 'price'] = -999"},{"metadata":{"_cell_guid":"5de574dd-d419-461f-86a3-f4a6ae596a47","_uuid":"65ffa9e0e871d7d0fad1aa2b0fc6b02880b3a90e","collapsed":true},"cell_type":"raw","source":"lbl.fit(list(train['user_type'].values) + list(test['user_type'].values))\ntrain['user_type'] = lbl.transform(train['user_type'])\ntest['user_type'] = lbl.transform(test['user_type'])"},{"metadata":{"_cell_guid":"77f6e25d-b59f-4642-9a4c-25e2fa8f7b05","_uuid":"ce644438d4a778f78e368b562e757f02259e485f","collapsed":true},"cell_type":"raw","source":"train[features_to_use].info()"},{"metadata":{"_cell_guid":"1fee1127-da12-4d72-ac62-3afe6722ac30","_uuid":"87702c9e4e258be08ad425bb5eb2687974911306","collapsed":true},"cell_type":"raw","source":"import xgboost as xgb\nfrom sklearn import model_selection"},{"metadata":{"_cell_guid":"95438d8c-9e8f-4674-a687-b9c36644e109","_uuid":"36f60bc5c37257d1ef7843b280bfe9d272c4c10b","collapsed":true},"cell_type":"raw","source":"param = {}\nparam['objective'] = 'reg:logistic'\nparam['eta'] = 0.1\nparam['max_depth'] = 7\nparam['silent'] = 0\nparam['eval_metric'] = \"rmse\"\nparam['min_child_weight'] = 6\nparam['subsample'] = 0.7\nparam['colsample_bytree'] = 0.7\nparam['seed'] = 0\nnum_rounds = 500"},{"metadata":{"_cell_guid":"8b3087f6-d964-42c7-b7b2-b576ccbd9eec","_uuid":"f89d59a978a41c2341ce567b66684faec464f90f","collapsed":true},"cell_type":"raw","source":"train_X = np.array(train[features_to_use])\ntrain_y = np.array(train['deal_probability'])\ntest_X = np.array(test[features_to_use])\n\nX_tr, X_va, y_tr, y_va = model_selection.train_test_split(train_X, train_y, test_size=0.2, random_state=2018)\n\ntr_data = xgb.DMatrix(X_tr, y_tr)\nva_data = xgb.DMatrix(X_va, y_va)\n\nwatchlist = [(tr_data, 'train'), (va_data, 'valid')]\n\nmodel = xgb.train(param, tr_data, 1000, watchlist, maximize=False, early_stopping_rounds = 25, verbose_eval=25)\n"},{"metadata":{"_cell_guid":"2528888f-ac42-4e4f-9945-ac0d764dcddd","_uuid":"61eb1fad1e65e827d9bb1890845eefa86c19be9d","collapsed":true},"cell_type":"raw","source":"X_te = xgb.DMatrix(test_X)\ny_pred = model.predict(X_te)\nsub = pd.read_csv('../input/sample_submission.csv')\nsub['deal_probability'] = y_pred\nsub['deal_probability'].clip(0.0, 1.0, inplace=True)\nsub.to_csv('xgb_with_basic_features.csv', index=False)\nsub.head()"},{"metadata":{"_cell_guid":"0b21dc6f-f711-48ae-93b1-7e0a80f6e7ab","_uuid":"89a4048b549373893823ffa7b0c8a740a203544d","collapsed":true,"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.5","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}