{"cells":[{"metadata":{"_cell_guid":"368a6d32-d6ed-4ee4-9ee0-f8e31242287f","_uuid":"ddc042d8fa7d31c012b68e1ecdc73e1db472426a"},"cell_type":"markdown","source":"# LIBRARIES"},{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-input":false,"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","collapsed":true,"trusted":false},"cell_type":"code","source":"import math \nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt \nimport scipy as sp # scientific computing \nimport seaborn as sns # visualization library\nimport time\n\nfrom datetime import datetime\nfrom collections import Counter\nfrom subprocess import check_output\n\nimport os\nprint(os.listdir(\"../input/kkbox-churn-scala-label/\"))\nprint(os.listdir(\"../input/kkbox-churn-prediction-challenge/\"))","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"dd01a8b3-2707-4eed-88b2-9efc491df39e","_uuid":"5d21647255e5b275043c757abe048837e732275b"},"cell_type":"markdown","source":"# TRAIN DATASET"},{"metadata":{"_cell_guid":"10d4dd65-3332-4f13-b020-c303c85d468f","_kg_hide-input":true,"_kg_hide-output":false,"_uuid":"50cce8342bd5b3bcb044283b57d2cef3ff60d878","collapsed":true,"trusted":false},"cell_type":"code","source":"df_train_file = \"../input/kkbox-churn-scala-label/user_label_201703.csv\"\ndf_train = pd.read_csv(df_train_file, dtype = {'is_churn': 'int8'})\ndf_train.info()","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"7dcaca27-5614-49f7-9dce-a872db1da5ca","_uuid":"cfdc01bb1d7859a4b67e03ca5361d45b9628d161"},"cell_type":"markdown","source":"# TEST DATASET"},{"metadata":{"_cell_guid":"c956af0c-79b2-4285-88fb-c06159b2b8b1","_kg_hide-input":true,"_kg_hide-output":false,"_uuid":"66dd3236c4bd2ed3df20c68584a603444fb393ee","collapsed":true,"trusted":false},"cell_type":"code","source":"df_test_file = \"../input/kkbox-churn-prediction-challenge/sample_submission_v2.csv\"\ndf_test = pd.read_csv(df_test_file, dtype = {'is_churn': 'int8'})\ndf_test.info()","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"50952f00-c4cd-47c7-ac2c-9f0cd32464d3","_uuid":"b1139d8814f30055acf7177114ef66c46c5cb3d0"},"cell_type":"markdown","source":"# USERLOGS DATASET"},{"metadata":{"_cell_guid":"d09e541c-216d-4a55-bbd9-73f9d6dad6f9","_uuid":"73710f076457276572d2e9bba3dc0dbcbf2249cb","collapsed":true,"trusted":false},"cell_type":"code","source":"df_userlogs_file = \"../input/kkbox-churn-prediction-challenge/user_logs.csv\"\ndf_userlogs_file_2 = \"../input/kkbox-churn-prediction-challenge/user_logs_v2.csv\"\ndf_userlogs = pd.read_csv(df_userlogs_file, nrows = 36000000)\ndf_userlogs_2 = pd.read_csv(df_userlogs_file_2)\ndf_userlogs = df_userlogs.append(df_userlogs_2, ignore_index = True)\ndf_userlogs.info()\ndel df_userlogs_2","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"6272e9bd-609f-421f-9709-bf5b94dc4645","_uuid":"62da4d15763334be54c680af4c8cfe696cebf873"},"cell_type":"markdown","source":"# VISUALISATION AND PRE-PROCESSING OF USERLOGS DATASET"},{"metadata":{"_cell_guid":"12259203-3d6e-47e5-ab8f-d840624b229c","_uuid":"745f437a280b9e00be5bb9795d99783ef0ea2e8d","collapsed":true,"trusted":false},"cell_type":"code","source":"# group by msno\ndel df_userlogs['date']\ncounts = df_userlogs.groupby('msno')['total_secs'].count().reset_index()\n# generating new feature 'days_listened'\ncounts.columns = ['msno', 'days_listened']\nsums = df_userlogs.groupby('msno').sum().reset_index()\ndf_userlogs = sums.merge(counts, how = 'inner', on = 'msno')","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"7a7175b1-5f58-40d7-99f0-1210bba4976b","_uuid":"c23e248ace4c673471bcfe15a67aabf89209c1fb","collapsed":true,"trusted":false},"cell_type":"code","source":"# finding avg seconds played per song\n# generating new feature 'secs_per_song'\ndf_userlogs['secs_per_song'] = df_userlogs['total_secs'].div(df_userlogs['num_25'] + df_userlogs['num_50'] + df_userlogs['num_75'] + df_userlogs['num_985'] + df_userlogs['num_100'])","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"2d64eee5-f131-4d34-ba76-8b73f9634379","_uuid":"30213cd2d5739eafc3cbec44392876c25f7090c7","collapsed":true,"trusted":false},"cell_type":"code","source":"df_userlogs.head()","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"f4326ee3-23cb-4226-8ccd-55979cc09f04","_uuid":"b31182f71be7cb4849f791e9230f64340d0c8c4c"},"cell_type":"markdown","source":"# MEMBERS DATASET"},{"metadata":{"_cell_guid":"483b5417-0f01-4a81-b458-b09260ae7d59","_uuid":"adab5cc6c5ad330f95279f24a583d0c917fab71e","collapsed":true,"trusted":false},"cell_type":"code","source":"df_members_file = \"../input/kkbox-churn-prediction-challenge/members_v3.csv\"\ndf_members = pd.read_csv(df_members_file)\ndf_members.info()","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"845aa630-153f-4e83-8b75-608521bbac6f","_uuid":"105b6c26e67c3cd22db890d2ece8d86a22858cde","collapsed":true,"trusted":false},"cell_type":"code","source":"# imputing missing values in members dataset\ndf_members['city'] = df_members.city.apply(lambda x: int(x) if pd.notnull(x) else \"NAN\")\ndf_members['bd'] = df_members.bd.apply(lambda x: -99999 if float(x) <= 1 else x )\ndf_members['bd'] = df_members.bd.apply(lambda x: -99999 if float(x) >= 100 else x )\ndf_members['gender'] = df_members['gender'].fillna(\"others\")\ndf_members['registered_via'] = df_members.registered_via.apply(lambda x: int(x) if pd.notnull(x) else \"NAN\")\ncurrent = datetime.strptime('20170331', \"%Y%m%d\").date()\n# generating new feature 'num_days' from 'registration_init_time'\ndf_members['num_days'] = df_members.registration_init_time.apply(lambda x: (current - datetime.strptime(str(int(x)), \"%Y%m%d\").date()).days if pd.notnull(x) else \"NAN\")\ndel df_members['registration_init_time']","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"d369a1a1-1ce7-4c0c-93ab-5044cffe88f3","_uuid":"6f91f4b5cf0bc229d8f456b2f1eaafaeea274e92"},"cell_type":"markdown","source":"# VISUALISATION AND PRE-PROCESSING OF MEMBERS DATASET"},{"metadata":{"_cell_guid":"754d6a85-1c1d-482c-8d1a-f6f8fd80be61","_uuid":"bf3cca09b8a975a8d6c038e2903ff30929316bd3"},"cell_type":"markdown","source":"# city analysis\nplt.figure(figsize = (12,12))\nplt.subplot(411) \ncity_order = df_members['city'].unique()\nindex = np.argwhere(city_order == \"NAN\")\ncity_order = np.delete(city_order, index)\ncity_order = sorted(city_order, key = lambda x: float(x))\nsns.countplot(x = \"city\", data = df_members , order = city_order)\nplt.ylabel('Count', fontsize = 12)\nplt.xlabel('City', fontsize = 12)\nplt.xticks(rotation = 'vertical')\nplt.title(\"Frequency of City Count\", fontsize = 12)\nplt.show()"},{"metadata":{"_cell_guid":"161bb185-5e12-4aa6-9b19-8999f3915204","_uuid":"6bb01f3a26375f4e244a32591b2e37917d8a8e81","collapsed":true,"trusted":false},"cell_type":"code","source":"# as city is a heavily skewed, we removed city feature\ndel df_members['city']","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"7e44074e-44fc-446c-8611-b6d3466d1667","_uuid":"f8b3d362d48c14e826b907b872de8c96feef9ea4","collapsed":true},"cell_type":"markdown","source":"# registered via analysis\nplt.figure(figsize = (12,12))\nplt.subplot(412)\nR_V_order = df_members['registered_via'].unique()\nR_V_order = sorted(R_V_order, key = lambda x: str(x))\nR_V_order = sorted(R_V_order, key = lambda x: float(x))\nsns.countplot(x = \"registered_via\", data = df_members, order = R_V_order)\nplt.ylabel('Count', fontsize = 12)\nplt.xlabel('Registered Via', fontsize = 12)\nplt.xticks(rotation = 'vertical')\nplt.title(\"Frequency of Registered Via Count\", fontsize = 12)\nplt.show()"},{"metadata":{"_cell_guid":"0171f17e-89a4-45b2-81e7-e38814c7c2f3","_uuid":"f125d10ca9978ec04d59c25b00f06aff128237f5","collapsed":true,"trusted":false},"cell_type":"code","source":"# process of binning\ndf_members['registered_via'].replace([-1, 1, 2, 5, 6, 8, 10, 11, 13, 14, 16, 17, 18, 19], 1, inplace = True)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"4f92bd9e-0cc2-407c-8bbd-53ed84ba2f37","_uuid":"9de3389d40ce2c87ffaa65bfa120d816c56322cc","collapsed":true},"cell_type":"markdown","source":"# registered via re-analysis\nplt.figure(figsize = (12,12))\nplt.subplot(412)\nR_V_order = df_members['registered_via'].unique()\nR_V_order = sorted(R_V_order, key = lambda x: str(x))\nR_V_order = sorted(R_V_order, key = lambda x: float(x))\nsns.countplot(x = \"registered_via\", data = df_members, order = R_V_order)\nplt.ylabel('Count', fontsize = 12)\nplt.xlabel('Registered Via', fontsize = 12)\nplt.xticks(rotation = 'vertical')\nplt.title(\"Frequency of Registered Via Count\", fontsize = 12)\nplt.show()"},{"metadata":{"_cell_guid":"8ce94d61-f3d4-48b5-a477-b3fc664caa2b","_uuid":"761f3bbbdf2ad9a7d7948d36fcbdb0a146f6c8fd"},"cell_type":"markdown","source":"# gender analysis\nplt.figure(figsize = (12,12))\nplt.subplot(413)\nsns.countplot(x = \"gender\", data = df_members)\nplt.ylabel('Count', fontsize = 12)\nplt.xlabel('Gender', fontsize = 12)\nplt.xticks(rotation = 'vertical')\nplt.title(\"Frequency of Gender Count\", fontsize = 12)\nplt.show()\ngender_count = Counter(df_members['gender']).most_common()\nprint(\"Gender Count \" + str(gender_count))"},{"metadata":{"_cell_guid":"179ce7b1-b964-4eb2-8274-10957d0076ff","_uuid":"0389ec9b664043e4f98f1f3b11d34697d84e3c3f"},"cell_type":"markdown","source":"# birth date analysis\nplt.figure(figsize = (12,8))\nbd_order = df_members['bd'].unique()\nbd_order = sorted(bd_order, key=lambda x: str(x))\nbd_order = sorted(bd_order, key=lambda x: float(x))\nsns.countplot(x=\"bd\", data = df_members, order = bd_order)\nplt.ylabel('Count', fontsize = 12)\nplt.xlabel('BD', fontsize = 12)\nplt.xticks(rotation = 'vertical')\nplt.title(\"Frequency of BD Count\", fontsize = 12)\nplt.show()\nbd_count = Counter(df_members['bd']).most_common()\nprint(\"BD Count \" + str(bd_count))"},{"metadata":{"_cell_guid":"a4697b03-2192-481d-8f01-4480d2a47011","_uuid":"f5c6b9484f863f1f68e8aff31095cc97a3c92326","collapsed":true,"trusted":false},"cell_type":"code","source":"# too many outliers so we removed bd feature\ndel df_members['bd']","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"cf5db81f-3d0e-4036-9112-8fa78ba425cc","_uuid":"f8d8fdacf64286394d777c1cccb920ed52d4f134"},"cell_type":"markdown","source":"# TRANSACTIONS DATASET"},{"metadata":{"_cell_guid":"a1193eb8-01bd-4309-8e46-49985cc3dd3a","_uuid":"7c4e56d2e1e2fb3998524b7c88671b9cde7a303c","collapsed":true,"trusted":false},"cell_type":"code","source":"# transactions dataset\ndf_transactions_file = \"../input/kkbox-churn-prediction-challenge/transactions.csv\"\ndf_transactions_file_2 = \"../input/kkbox-churn-prediction-challenge/transactions_v2.csv\"\ndf_transactions = pd.read_csv(df_transactions_file)\ndf_transactions_2 = pd.read_csv(df_transactions_file_2)\ndf_transactions = df_transactions.append(df_transactions_2, ignore_index = True)\ndf_transactions.describe()\ndel df_transactions_2","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"50e1c798-0f45-4b4c-a8a7-415d79e08cf5","_uuid":"60fe74f4bae787f0182c999f211a1e0c0b904519"},"cell_type":"markdown","source":"# VISUALISATION AND PRE-PROCESSING OF TRANSACTIONS DATASET"},{"metadata":{"_cell_guid":"27c9c092-843a-4c9c-85d8-51b70325ce9a","_uuid":"6c4004de8c205a14fd03cf5ad5b0f7ef87d95ea9","collapsed":true},"cell_type":"markdown","source":"# payment_method_id analysis\nplt.figure(figsize=(18,6))\nplt.subplot(311)\nsns.countplot(x = \"payment_method_id\", data = df_transactions)\nplt.ylabel('Count', fontsize = 12)\nplt.xlabel('payment_method_id', fontsize = 12)\nplt.xticks(rotation = 'vertical')\nplt.title(\"Frequency of payment_method_id Count in transactions Data Set\", fontsize = 12)\nplt.show()\npayment_method_id_count = Counter(df_transactions['payment_method_id']).most_common()\nprint(\"payment_method_id Count \" + str(payment_method_id_count))"},{"metadata":{"_cell_guid":"fa231bf0-1818-43f9-a9f3-46c8887d6735","_uuid":"da304175d60e260703dcddf163a38b40f667697e","collapsed":true,"trusted":false},"cell_type":"code","source":"# as payment_method_id is a heavily skewed, we removed payment_method_id feature\n#del df_transactions['payment_method_id']","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"50561a5c-c6e9-4b45-b9b9-cc92746b204c","_uuid":"f34291aef560c450a0156671c57f9d8d4d84c884","collapsed":true},"cell_type":"markdown","source":"# payment_plan_days analysis\nplt.figure(figsize = (18,6))\nsns.countplot(x = \"payment_plan_days\", data = df_transactions)\nplt.ylabel('Count', fontsize = 12)\nplt.xlabel('payment_plan_days', fontsize = 12)\nplt.xticks(rotation='vertical')\nplt.title(\"Frequency of payment_plan_days Count in transactions Data Set\", fontsize = 12)\nplt.show()\npayment_plan_days_count = Counter(df_transactions['payment_plan_days']).most_common()\nprint(\"payment_plan_days Count \" + str(payment_plan_days_count))"},{"metadata":{"_cell_guid":"4369b768-bb7e-400b-a29e-5cf7a2d5bf6c","_uuid":"d1a7ab49178ac8ec3f772dbbbe60145e0bcb4815","collapsed":true,"trusted":false},"cell_type":"code","source":"# as payment_plan_days is a heavily skewed, we removed payment_plan_days feature\ndel df_transactions['payment_plan_days']","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"595bcb9b-4d0a-42db-bbbc-23cdb6fe1d8b","_uuid":"aebdb3293a91a0427f98c86bc89cc9aa13c14955","collapsed":true},"cell_type":"markdown","source":"# plan_list_price analysis\nplt.figure(figsize = (18,6))\nsns.countplot(x = \"plan_list_price\", data = df_transactions)\nplt.ylabel('Count', fontsize = 12)\nplt.xlabel('plan_list_price', fontsize = 12)\nplt.xticks(rotation = 'vertical')\nplt.title(\"Frequency of plan_list_price Count in transactions Data Set\", fontsize = 12)\nplt.show()\nplan_list_price_count = Counter(df_transactions['plan_list_price']).most_common()\nprint(\"plan_list_price Count \" + str(plan_list_price_count))"},{"metadata":{"_cell_guid":"0666f404-80f4-4c65-8afe-021c1aa5376c","_uuid":"ea23ad2950e0b28181eef1361c11d96c5157ef4b","collapsed":true},"cell_type":"markdown","source":"# actual_amount_paid analysis\nplt.figure(figsize = (18,6))\nsns.countplot(x = \"actual_amount_paid\", data = df_transactions)\nplt.ylabel('Count', fontsize = 12)\nplt.xlabel('actual_amount_paid', fontsize = 12)\nplt.xticks(rotation = 'vertical')\nplt.title(\"Frequency of actual_amount_paid Count in transactions Data Set\", fontsize = 12)\nplt.show()\nactual_amount_paid_count = Counter(df_transactions['actual_amount_paid']).most_common()\nprint(\"actual_amount_paid Count \" + str(actual_amount_paid_count))"},{"metadata":{"_cell_guid":"ee6ccd3a-589b-4c3a-b337-de3410460aad","_uuid":"23b206345287f195478ed9049adcab674be01c33","collapsed":true,"trusted":false},"cell_type":"code","source":"# correlation between plan_list_price and actual_amount_paid\ndf_transactions['plan_list_price'].corr(df_transactions['actual_amount_paid'], method = 'pearson') \n# as highly correlated we removed actual_amount_paid\ndel df_transactions['actual_amount_paid']","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"a191d160-d773-4a78-bda9-62b8c58668aa","_uuid":"06d29c585d08ca08c60a552400fe08985efd4e2c","collapsed":true,"trusted":false},"cell_type":"code","source":"# delete these two columns because is_churn is based on these two features which is already labelled in train dataset\ndel df_transactions['membership_expire_date']\ndel df_transactions['transaction_date']\n# removing duplicates\ndf_transactions = df_transactions.drop_duplicates()\ndf_transactions = df_transactions.groupby('msno').mean().reset_index()\ndf_transactions.head()","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"09b886cf-17fd-4cb5-b23a-b4bd0f9bfe0b","_uuid":"d6c023ea28c6288374483dea791de927960ac215","collapsed":true},"cell_type":"markdown","source":"# is_auto_renew analysis\nplt.figure(figsize = (4,4))\nsns.countplot(x = \"is_auto_renew\", data = df_transactions)\nplt.ylabel('Count', fontsize = 12)\nplt.xlabel('is_auto_renew', fontsize = 12)\nplt.xticks(rotation = 'vertical')\nplt.title(\"Frequency of is_auto_renew Count in transactions Data Set\", fontsize = 6)\nplt.show()\nis_auto_renew_count = Counter(df_transactions['is_auto_renew']).most_common()\nprint(\"is_auto_renew Count \" + str(is_auto_renew_count))"},{"metadata":{"_cell_guid":"d6b95931-1cd7-47d8-94cf-eab630170e8f","_uuid":"50c0ba3a87329b99511ab5d462aa9d9020227e70","collapsed":true},"cell_type":"markdown","source":"# is_cancel analysis\nplt.figure(figsize = (4,4))\nsns.countplot(x = \"is_cancel\", data = df_transactions)\nplt.ylabel('Count', fontsize = 12)\nplt.xlabel('is_cancel', fontsize = 12)\nplt.xticks(rotation = 'vertical')\nplt.title(\"Frequency of is_cancel Count in transactions Data Set\", fontsize = 6)\nplt.show()\nis_cancel_count = Counter(df_transactions['is_cancel']).most_common()\nprint(\"is_cancel Count \" + str(is_cancel_count))"},{"metadata":{"_cell_guid":"af3f9218-356c-4596-be68-3ab09b0573bd","_uuid":"82ff1351e565584610484323e55887102e8cb718"},"cell_type":"markdown","source":"# PREPARATION"},{"metadata":{"_cell_guid":"205dfc2c-a147-42d2-8130-192b2c6e9a14","_uuid":"31fb6d994a0b7da9b5978ab97baf8c3270e39038","collapsed":true,"trusted":false},"cell_type":"code","source":"# hot encoding\ngender = {'male': 0, 'female': 1, 'others' :2}","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"3404b976-608b-4c36-a638-d26ca2e827b3","_uuid":"1193f5b482cee3abee4891fd1e566d821aff67c6","collapsed":true,"trusted":false},"cell_type":"code","source":"# merge the training dataset with members, transaction, userlogs data set\ndf_training = pd.merge(left = df_train, right = df_members, how = 'left', on = ['msno'])\ndf_training = pd.merge(left = df_training, right = df_transactions , how = 'left', on = ['msno'])\ndf_training = pd.merge(left = df_training, right = df_userlogs, how = 'left', on = ['msno'])\ndf_training['gender'] = df_training['gender'].map(gender)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"12660acc-9380-4f3d-849a-3f0c92614544","_uuid":"b535d2da2f7faefce95462455a47d008c13bc9d4","collapsed":true,"trusted":false},"cell_type":"code","source":"# merge the testing dataset with members, transaction, userlogs data set\ndf_testing = pd.merge(left = df_test, right = df_members, how = 'left', on = ['msno'])\ndf_testing = pd.merge(left = df_testing, right = df_transactions , how = 'left', on = ['msno'])\ndf_testing = pd.merge(left = df_testing, right = df_userlogs, how = 'left', on = ['msno'])\ndf_testing['gender'] = df_testing['gender'].map(gender)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"a37e0fce-96ab-4467-ad39-c8f57af5c52f","_uuid":"e27779b4cedc30bc50db3d185f37166582113ec7","collapsed":true,"trusted":false},"cell_type":"code","source":"del df_members\ndel df_userlogs\ndel df_transactions","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"542718b7-fd2c-4a10-9ab2-36061f63f179","_uuid":"2dd573cf909bb4c0b6ec2c8e3a580b69f5f608bb","collapsed":true},"cell_type":"markdown","source":"df_training = df_training.fillna(-1)\ndf_testing = df_testing.fillna(-1)"},{"metadata":{"_cell_guid":"d4adbfe8-25fe-49ec-abe6-538fe4269791","_uuid":"1133c873a0817bcb8a2c04d0d55d3b704a37f89e","collapsed":true,"trusted":false},"cell_type":"code","source":"# Reasons we did not fillna for datasets after merging is because the models later will automatically impute best values for missing values","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"3927f87e-0237-46af-a8e8-c91316f4abe5","_uuid":"395160783da9b45deddb53514fb125c9fcfa9712"},"cell_type":"markdown","source":"# LIBRARIES"},{"metadata":{"_cell_guid":"9824e337-a8a2-46d4-864e-16abb649b806","_uuid":"452d1d468fe1bf269c7c1552bea93d44bdf2b513","collapsed":true,"trusted":false},"cell_type":"code","source":"import sklearn as sl # machine learning\nfrom sklearn import model_selection\nfrom sklearn.metrics import classification_report\nfrom sklearn.metrics import confusion_matrix\nfrom sklearn.metrics import accuracy_score\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.discriminant_analysis import LinearDiscriminantAnalysis\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.naive_bayes import GaussianNB\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.model_selection import train_test_split\nimport lightgbm as lgb","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"536735e2-e6d9-4b86-8233-73704c40731c","_uuid":"665e6a2498510ecaeae7df4a8a14e45c67082b38","collapsed":true,"trusted":false},"cell_type":"code","source":"cols = [c for c in df_training.columns if c not in ['is_churn','msno']] \nX = df_training[cols] \nY = df_training['is_churn'] \nvalidation_size = 0.20\nseed = 7\nscoring = 'roc_auc'\nX_train, X_validation, Y_train, Y_validation = model_selection.train_test_split(X, Y, test_size = validation_size, random_state = seed)","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"abd9ed98-72d1-49bf-a631-87c2d3dccf97","_uuid":"579f633f56d84f84133b2737a2f3f7d704af120b"},"cell_type":"markdown","source":"models = []\nmodels.append(('LR', LogisticRegression()))\nmodels.append(('LDA', LinearDiscriminantAnalysis()))\nmodels.append(('KNN', KNeighborsClassifier()))\nmodels.append(('DTC', DecisionTreeClassifier()))\nmodels.append(('GNB', GaussianNB()))\nmodels.append(('RFC', RandomForestClassifier()))\nresults = []\nnames = []\nscoring = 'roc_auc'\nseed = 7\nfor name, model in models:\n    kfold = model_selection.KFold(n_splits = 10, random_state = seed)\n    cv_results = model_selection.cross_val_score(model, X_train, Y_train, cv = kfold, scoring = scoring)\n    results.append(cv_results)\n    names.append(name)\n    msg = \"%s: %f (%f)\" % (name, cv_results.mean(), cv_results.std())\n    print(msg)"},{"metadata":{"_cell_guid":"ce378683-8ec1-4a0c-91ea-27ab8fd0cc98","_uuid":"31b9611a862b87f2e24dbcafee0518ec7a9a00a2","collapsed":true,"trusted":false},"cell_type":"code","source":"# LGBOOST\nlgb_params = { 'learning_rate': 0.02, \n               'application': 'binary', \n               'max_depth': 35, \n               'num_leaves': 3500, \n               'verbosity': -1, \n               'metric': 'binary_logloss' \n              } \nd_trainl = lgb.Dataset(X_train, label = Y_train) \nd_validl = lgb.Dataset(X_validation, label = Y_validation) \nwatchlistl = [d_trainl, d_validl]\nlgb_model = lgb.train(lgb_params, \n                      train_set = d_trainl, \n                      num_boost_round = 1000, \n                      valid_sets = watchlistl, \n                      early_stopping_rounds = 50, \n                      verbose_eval = 10)\nlgb_pred = lgb_model.predict(df_testing[cols])\nlgb_testing = df_testing.copy()\nlgb_testing['is_churn'] = lgb_pred.clip(0.+1e-15, 1-1e-15) \nlgb_testing[['msno','is_churn']].to_csv('lgb_result.csv', index = False)","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}