{"cells":[{"metadata":{"trusted":true,"_uuid":"12e61844d6dfe64b7866cb07afd99ffecd652aef"},"cell_type":"code","source":"import pandas as pd\nimport matplotlib.pyplot as plt\nimport numpy as np\nfrom catboost import Pool, CatBoostRegressor","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"afc282b652badc42b6dba92d58f781ca500eb393"},"cell_type":"code","source":"raw_df = pd.read_csv(\"../input/train.csv\")\ntest_data = pd.read_csv(\"../input/test.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ab3585e9c2d72c2722255450b5e240fc9ee72f19"},"cell_type":"code","source":"raw_df.sort_values(by=\"first_active_month\", inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"79d92ac61c5ee373b3cdee8f252145dcbfe7b76c"},"cell_type":"code","source":"raw_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"03f1dde3fafab685e6082ce98577097f44637fd9"},"cell_type":"code","source":"print(raw_df.nunique(), raw_df[\"first_active_month\"].unique())","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"99539688bb04d304a0714f440ca88a612942b6e8"},"cell_type":"markdown","source":"### About data\nData seems to be of 75 months, starting 2011-11 to 2018-02\n* *feature_1* has 5 categories\n* *feature_2* has 3 categories\n* *feature_3* has 2 categories\n"},{"metadata":{"_uuid":"5c70a2edacf5a5e8bb261f436902212bec1a27c6"},"cell_type":"markdown","source":"### Let's train very basic baseline model with given features"},{"metadata":{"_uuid":"85fd8e9ca8994824701a3aeed546688de978dbd0"},"cell_type":"markdown","source":"##### Convert first_active_month to datetime"},{"metadata":{"trusted":true,"_uuid":"99c199672fdcd2bc640fee527ddee920e52fc84d"},"cell_type":"code","source":"raw_df[\"first_active_month\"] = pd.to_datetime(raw_df[\"first_active_month\"], format=\"%Y-%m\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"446b57b881d36fb6fb3d11439b14bcf8b94a18f8"},"cell_type":"code","source":"raw_df.sort_values(by=\"first_active_month\", inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1584e48f58160ebe7456723b91ff461d341f943d"},"cell_type":"code","source":"raw_df.tail()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"6d3ebd8fd580b01a2fcf116f59df8f9885bda2a9"},"cell_type":"markdown","source":"#### Train test split"},{"metadata":{"trusted":true,"_uuid":"707c8b2825bf43324040de77e9facc936f4ee0ac"},"cell_type":"code","source":"# raw_df[\"first_active_month\"].sort_values().value_counts()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3f7015ad8d77680dca778a3980f60af2e6873fdf"},"cell_type":"code","source":"def train_test_split(df):\n    X_train = df[df[\"first_active_month\"] < \"2017-11-01\" ]\n    X_val =  df[df[\"first_active_month\"] >= \"2017-11-01\" ]\n    y_train = X_train[\"target\"]\n    y_val = X_val[\"target\"]\n    X_train.drop(columns=\"target\", axis=1, inplace=True)\n    X_val.drop(columns=\"target\", axis=1, inplace=True)\n    X_train[\"first_active_month\"] = X_train[\"first_active_month\"].dt.strftime('%Y-%m-%d')\n    X_val[\"first_active_month\"] = X_val[\"first_active_month\"].dt.strftime('%Y-%m-%d')\n    return X_train, X_val, y_train, y_val\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"caf2c06d3b4527a2c0b0282544c044cbbd5be218"},"cell_type":"code","source":"X_train, X_val, y_train, y_val = train_test_split(raw_df)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c09bb6d8ed8caa546a843f99a6d4c6c342238ee3"},"cell_type":"code","source":"print(X_train.shape, X_val.shape,y_train.shape, y_val.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2a9b9252c84f62232a43d16f3ef8cdc5e94f12ca"},"cell_type":"code","source":"X_train.fillna(0, inplace=True)\nX_val.fillna(0, inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bf83fff7ecaec150bbe77f5307e4e7a0651186cb"},"cell_type":"code","source":"X_train.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"84f2a6fba3f8906207d3b12814e8b4bef7c4b571"},"cell_type":"code","source":"train_pool = Pool(X_train, y_train,cat_features=[0,1])\ntest_pool = Pool(X_val, cat_features=[0,1])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"37d4ded73c8051e5cc4947088468030da0c6a5fd"},"cell_type":"code","source":"model = CatBoostRegressor(depth=6, learning_rate=0.0001, iterations=500, loss_function='RMSE')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"scrolled":true,"_uuid":"01bc8395b8b6e5ddd29240bf8e90baad17f33497"},"cell_type":"code","source":"model.fit(train_pool,plot=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4909019a26fe09d0d72b36759c8bdd807686e73e"},"cell_type":"code","source":"preds = model.predict(test_pool)\nprint(preds)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a24fd7e53372e47a46f18852470a40e0a6811300"},"cell_type":"code","source":"df = pd.DataFrame()\ndf[\"date\"] = X_val[\"first_active_month\"]\ndf[\"card_id\"] = X_val[\"card_id\"]\ndf[\"actual\"] = y_val\ndf[\"pred\"] = preds","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1106ee7d0ec8c99e1bd7a39ee514d6001ef5d2b7"},"cell_type":"code","source":"def plot(df):\n    df[\"date\"] = pd.to_datetime(df[\"date\"], format=\"%Y-%m\")\n    plt.plot(df[\"date\"], df[\"actual\"], label=\"actual\")\n    plt.plot(df[\"date\"], df[\"pred\"], label=\"predicted\")\n    plt.legend()\n    plt.xlabel('Date')\n    plt.ylabel('Prediction')\n    plt.xticks(rotation=30)\n    plt.yticks([x * 0.1 for x in range(-1, 1)])\n#     plt.axis(ymax=1.1)\n    plt.title(\"Compare\")\n    plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"baf50039c05f70ff6151440a63bac34923832e4a"},"cell_type":"code","source":"def plot_cards():\n    x = 0\n    for d in df['date'].unique(): \n        temp_df = df[df[\"date\"] == d]\n#         print(temp_df.shape)\n        plot(temp_df)\n#         if x == 10:\n#             break\n#         x = x + 1\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"203bdf00ad05ad32247b5fd7c517331ce8c4554f"},"cell_type":"code","source":"plot_cards()","execution_count":null,"outputs":[]}],"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.0"}},"nbformat":4,"nbformat_minor":1}