{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"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\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\nfrom tpot import TPOTClassifier\nfrom sklearn.model_selection import train_test_split, StratifiedKFold, StratifiedGroupKFold, GroupKFold\nfrom sklearn.impute import SimpleImputer\n\nimport matplotlib.pyplot as plt\n\n# import os\n# for dirname, _, filenames in os.walk('/kaggle/input'):\n#     for filename in filenames:\n#         print(os.path.join(dirname, filename))\n\nfrom sklearn import metrics\nfrom sklearn.ensemble import RandomForestClassifier, ExtraTreesClassifier, GradientBoostingClassifier, HistGradientBoostingClassifier\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.neighbors import KNeighborsClassifier\n# from sklearn.naive_bayes import GaussianNB\n# from sklearn.naive_bayes import CategoricalNB\nfrom sklearn.svm import SVC, LinearSVC\nfrom sklearn.linear_model import LogisticRegression\n\n\nfrom sklearn.preprocessing import StandardScaler, MinMaxScaler\n\nimport featuretools as ft\nfrom woodwork.logical_types import Categorical\n\n#from sklearn.metrics import f1_score, accuracy_score","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-08-14T02:26:23.062782Z","iopub.execute_input":"2022-08-14T02:26:23.063766Z","iopub.status.idle":"2022-08-14T02:26:26.613324Z","shell.execute_reply.started":"2022-08-14T02:26:23.063635Z","shell.execute_reply":"2022-08-14T02:26:26.612156Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/tabular-playground-series-aug-2022/train.csv')\ntest = pd.read_csv('/kaggle/input/tabular-playground-series-aug-2022/test.csv')\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:26.615449Z","iopub.execute_input":"2022-08-14T02:26:26.615779Z","iopub.status.idle":"2022-08-14T02:26:26.908913Z","shell.execute_reply.started":"2022-08-14T02:26:26.615749Z","shell.execute_reply":"2022-08-14T02:26:26.907859Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.info()","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:26.910761Z","iopub.execute_input":"2022-08-14T02:26:26.911134Z","iopub.status.idle":"2022-08-14T02:26:26.939676Z","shell.execute_reply.started":"2022-08-14T02:26:26.911103Z","shell.execute_reply":"2022-08-14T02:26:26.938546Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.isna().mean()","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:26.942818Z","iopub.execute_input":"2022-08-14T02:26:26.943203Z","iopub.status.idle":"2022-08-14T02:26:26.957693Z","shell.execute_reply.started":"2022-08-14T02:26:26.943169Z","shell.execute_reply":"2022-08-14T02:26:26.956953Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cat_features = ['product_code','attribute_0','attribute_1']\nall_cols = train.columns.values","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:26.958911Z","iopub.execute_input":"2022-08-14T02:26:26.959833Z","iopub.status.idle":"2022-08-14T02:26:26.964251Z","shell.execute_reply.started":"2022-08-14T02:26:26.959801Z","shell.execute_reply":"2022-08-14T02:26:26.963275Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"num_features = train.select_dtypes(include=np.number).drop(['id','failure'],axis=1).columns.tolist()\nnum_features","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:26.965873Z","iopub.execute_input":"2022-08-14T02:26:26.966245Z","iopub.status.idle":"2022-08-14T02:26:26.982765Z","shell.execute_reply.started":"2022-08-14T02:26:26.966217Z","shell.execute_reply":"2022-08-14T02:26:26.981461Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train['failure'].hist()","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:26.983643Z","iopub.execute_input":"2022-08-14T02:26:26.983937Z","iopub.status.idle":"2022-08-14T02:26:27.238782Z","shell.execute_reply.started":"2022-08-14T02:26:26.983910Z","shell.execute_reply":"2022-08-14T02:26:27.237653Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.describe()","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:27.240669Z","iopub.execute_input":"2022-08-14T02:26:27.241402Z","iopub.status.idle":"2022-08-14T02:26:27.345214Z","shell.execute_reply.started":"2022-08-14T02:26:27.241356Z","shell.execute_reply":"2022-08-14T02:26:27.344085Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Feature engineering","metadata":{}},{"cell_type":"code","source":"# # Make an entityset and add the entity\n# es = ft.EntitySet(id = 'playground')\n\n# es = es.add_dataframe(\n#     dataframe_name=\"train\",\n#     dataframe=train.drop(['failure'],axis=1),\n#     logical_types={\n#         \"product_code\": Categorical,\n#         \"attribute_0\": Categorical,\n#         \"attribute_1\": Categorical\n#     }\n# #     ,\n# #     variable_types={\n# #         \"product_code\": ft.variable_types.Id,\n# #         \"attribute_0\": ft.variable_types.Id,\n# #         \"attribute_1\": ft.variable_types.Id\n# #     }\n# )\n\n# es = es.add_dataframe(\n#     dataframe_name=\"test\",\n#     dataframe=test,\n#     logical_types={\n#         \"product_code\": Categorical,\n#         \"attribute_0\": Categorical,\n#         \"attribute_1\": Categorical\n#     }\n# )\n\n\n# # Default primitives from featuretools\n# default_agg_primitives =  [\"sum\", \"std\", \"max\", \"skew\", \"min\", \"mean\", \"mode\", \"entropy\"]\n# default_trans_primitives =  ['divide_numeric', 'add_numeric_scalar', 'add_numeric', 'multiply_numeric',\n#        'greater_than_scalar', 'greater_than_equal_to_scalar',\n#         'less_than_scalar', 'subtract_numeric',\n#        'sine',\n#        'less_than_equal_to', 'cum_sum', 'percentile',\n#         'greater_than_equal_to', 'divide_numeric_scalar',\n#         'cosine', \n#        'subtract_numeric_scalar', 'less_than_equal_to_scalar',\n#        'cum_count', \n#        'divide_by_feature',  'tangent',\n#        'scalar_subtract_numeric_feature', 'equal',\n#        'cum_mean','modulo_numeric']\n\n# # DFS for application features using a max depth of 2\n# train_feature_matrix, train_feature_names = ft.dfs(entityset = es, target_dataframe_name = 'train',\n#                        trans_primitives = default_trans_primitives,\n#                       agg_primitives=default_agg_primitives, \n#                        max_depth = 1, features_only=False, verbose = True)\n\n# train_feature_matrix = train_feature_matrix.iloc[:,24:].fillna(0)\n# train_feature_matrix = train_feature_matrix.drop(['1 / measurement_0', '1 / measurement_1', '1 / measurement_2',\n#        'attribute_2 / measurement_0', 'attribute_2 / measurement_1',\n#        'attribute_2 / measurement_2', 'attribute_3 / measurement_0',\n#        'attribute_3 / measurement_1', 'attribute_3 / measurement_2',\n#        'loading / measurement_0', 'loading / measurement_1',\n#        'loading / measurement_2', 'measurement_0 / measurement_1',\n#        'measurement_0 / measurement_2', 'measurement_1 / measurement_0',\n#        'measurement_1 / measurement_2', 'measurement_10 / measurement_0',\n#        'measurement_10 / measurement_1', 'measurement_10 / measurement_2',\n#        'measurement_11 / measurement_0', 'measurement_11 / measurement_1',\n#        'measurement_11 / measurement_2', 'measurement_12 / measurement_0',\n#        'measurement_12 / measurement_1', 'measurement_12 / measurement_2',\n#        'measurement_13 / measurement_0', 'measurement_13 / measurement_1',\n#        'measurement_13 / measurement_2', 'measurement_14 / measurement_0',\n#        'measurement_14 / measurement_1', 'measurement_14 / measurement_2',\n#        'measurement_15 / measurement_0', 'measurement_15 / measurement_1',\n#        'measurement_15 / measurement_2', 'measurement_16 / measurement_0',\n#        'measurement_16 / measurement_1', 'measurement_16 / measurement_2',\n#        'measurement_17 / measurement_0', 'measurement_17 / measurement_1',\n#        'measurement_17 / measurement_2', 'measurement_2 / measurement_0',\n#        'measurement_2 / measurement_1', 'measurement_3 / measurement_0',\n#        'measurement_3 / measurement_1', 'measurement_3 / measurement_2',\n#        'measurement_4 / measurement_0', 'measurement_4 / measurement_1',\n#        'measurement_4 / measurement_2', 'measurement_5 / measurement_0',\n#        'measurement_5 / measurement_1', 'measurement_5 / measurement_2',\n#        'measurement_6 / measurement_0', 'measurement_6 / measurement_1',\n#        'measurement_6 / measurement_2', 'measurement_7 / measurement_0',\n#        'measurement_7 / measurement_1', 'measurement_7 / measurement_2',\n#        'measurement_8 / measurement_0', 'measurement_8 / measurement_1',\n#        'measurement_8 / measurement_2', 'measurement_9 / measurement_0',\n#        'measurement_9 / measurement_1', 'measurement_9 / measurement_2'],axis=1,errors='ignore')\n\n# test_feature_matrix, test_feature_names = ft.dfs(entityset = es, target_dataframe_name = 'test',\n#                        trans_primitives = default_trans_primitives,\n#                       agg_primitives=default_agg_primitives, \n#                        max_depth = 1, features_only=False, verbose = True)\n# test_feature_matrix = test_feature_matrix.iloc[:,24:].fillna(0)\n# test_feature_matrix = test_feature_matrix.drop(['1 / measurement_0', '1 / measurement_1', '1 / measurement_2',\n#        'attribute_2 / measurement_0', 'attribute_2 / measurement_1',\n#        'attribute_2 / measurement_2', 'attribute_3 / measurement_0',\n#        'attribute_3 / measurement_1', 'attribute_3 / measurement_2',\n#        'loading / measurement_0', 'loading / measurement_1',\n#        'loading / measurement_2', 'measurement_0 / measurement_1',\n#        'measurement_0 / measurement_2', 'measurement_1 / measurement_0',\n#        'measurement_1 / measurement_2', 'measurement_10 / measurement_0',\n#        'measurement_10 / measurement_1', 'measurement_10 / measurement_2',\n#        'measurement_11 / measurement_0', 'measurement_11 / measurement_1',\n#        'measurement_11 / measurement_2', 'measurement_12 / measurement_0',\n#        'measurement_12 / measurement_1', 'measurement_12 / measurement_2',\n#        'measurement_13 / measurement_0', 'measurement_13 / measurement_1',\n#        'measurement_13 / measurement_2', 'measurement_14 / measurement_0',\n#        'measurement_14 / measurement_1', 'measurement_14 / measurement_2',\n#        'measurement_15 / measurement_0', 'measurement_15 / measurement_1',\n#        'measurement_15 / measurement_2', 'measurement_16 / measurement_0',\n#        'measurement_16 / measurement_1', 'measurement_16 / measurement_2',\n#        'measurement_17 / measurement_0', 'measurement_17 / measurement_1',\n#        'measurement_17 / measurement_2', 'measurement_2 / measurement_0',\n#        'measurement_2 / measurement_1', 'measurement_3 / measurement_0',\n#        'measurement_3 / measurement_1', 'measurement_3 / measurement_2',\n#        'measurement_4 / measurement_0', 'measurement_4 / measurement_1',\n#        'measurement_4 / measurement_2', 'measurement_5 / measurement_0',\n#        'measurement_5 / measurement_1', 'measurement_5 / measurement_2',\n#        'measurement_6 / measurement_0', 'measurement_6 / measurement_1',\n#        'measurement_6 / measurement_2', 'measurement_7 / measurement_0',\n#        'measurement_7 / measurement_1', 'measurement_7 / measurement_2',\n#        'measurement_8 / measurement_0', 'measurement_8 / measurement_1',\n#        'measurement_8 / measurement_2', 'measurement_9 / measurement_0',\n#        'measurement_9 / measurement_1', 'measurement_9 / measurement_2'],axis=1,errors='ignore')","metadata":{"jupyter":{"source_hidden":true},"execution":{"iopub.status.busy":"2022-08-14T02:26:27.346887Z","iopub.execute_input":"2022-08-14T02:26:27.347361Z","iopub.status.idle":"2022-08-14T02:26:27.356949Z","shell.execute_reply.started":"2022-08-14T02:26:27.347329Z","shell.execute_reply":"2022-08-14T02:26:27.355729Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"##product code aggs\npcagg = train.groupby('product_code')[num_features].agg(['min','max','mean','std','var','count'])\npcagg.columns = ['_pc_'.join(x) for x in pcagg.columns]\ntrain = train.merge(pcagg, on='product_code')\npcagg","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:27.361835Z","iopub.execute_input":"2022-08-14T02:26:27.362255Z","iopub.status.idle":"2022-08-14T02:26:27.741918Z","shell.execute_reply.started":"2022-08-14T02:26:27.362225Z","shell.execute_reply":"2022-08-14T02:26:27.741135Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"##attribute_0 code aggs\na0agg = train.groupby('attribute_0')[num_features].agg(['min','max','mean','std','var','count'])\na0agg.columns = ['_a0_'.join(x) for x in a0agg.columns]\ntrain = train.merge(a0agg, on='attribute_0')\n\n##attribute_1 code aggs\na1agg = train.groupby('attribute_1')[num_features].agg(['min','max','mean','std','var','count'])\na1agg.columns = ['_a1_'.join(x) for x in a1agg.columns]\ntrain = train.merge(a1agg, on='attribute_1')\n\n##attribute_2 code aggs\na2agg = train.groupby('attribute_2')[num_features].agg(['min','max','mean','std','var','count'])\na2agg.columns = ['_a2_'.join(x) for x in a2agg.columns]\ntrain = train.merge(a2agg, on='attribute_2')\n\n##attribute_3 code aggs\na3agg = train.groupby('attribute_3')[num_features].agg(['min','max','mean','std','var','count'])\na3agg.columns = ['_a3_'.join(x) for x in a3agg.columns]\ntrain = train.merge(a3agg, on='attribute_3')\n\ntrain['loading_log'] = np.log10(train['loading'])\ntrain['measurement_9_sq'] = train['measurement_9']**2\n\n# train['sum16'] = train[['measurement_1', 'measurement_2', 'measurement_3', 'measurement_4','measurement_5', 'measurement_6','measurement_7', 'measurement_8', 'measurement_9', 'measurement_10','measurement_11', 'measurement_12','measurement_13','measurement_14','measurement_15','measurement_16']].sum(axis=1)\n#train['sum17'] = train[['measurement_1', 'measurement_2', 'measurement_3', 'measurement_4','measurement_5', 'measurement_6','measurement_7', 'measurement_8', 'measurement_9', 'measurement_10','measurement_11', 'measurement_12','measurement_13','measurement_14','measurement_15','measurement_16','measurement_17']].sum(axis=1)\n\n\n# numsq = train[num_features]**2\n# numsq.add_suffix('_sq')\n# train = pd.concat([train,numsq],axis=1)\n\ntrain","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:27.743592Z","iopub.execute_input":"2022-08-14T02:26:27.744289Z","iopub.status.idle":"2022-08-14T02:26:38.895794Z","shell.execute_reply.started":"2022-08-14T02:26:27.744253Z","shell.execute_reply":"2022-08-14T02:26:38.894530Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#one hot encode attribute_0 only\ntrain = pd.get_dummies(train, columns=['attribute_0'])","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:38.896993Z","iopub.execute_input":"2022-08-14T02:26:38.897320Z","iopub.status.idle":"2022-08-14T02:26:39.106030Z","shell.execute_reply.started":"2022-08-14T02:26:38.897291Z","shell.execute_reply":"2022-08-14T02:26:39.105059Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"features = train.drop(['id','failure','product_code','attribute_1'],axis=1).columns\nfeatures","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:39.107319Z","iopub.execute_input":"2022-08-14T02:26:39.107630Z","iopub.status.idle":"2022-08-14T02:26:39.243887Z","shell.execute_reply.started":"2022-08-14T02:26:39.107603Z","shell.execute_reply":"2022-08-14T02:26:39.242851Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"imputer = SimpleImputer(strategy=\"median\")\nimputer.fit(train[features])\ntrain[features] = imputer.transform(train[features])","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:39.245053Z","iopub.execute_input":"2022-08-14T02:26:39.245368Z","iopub.status.idle":"2022-08-14T02:26:41.595154Z","shell.execute_reply.started":"2022-08-14T02:26:39.245339Z","shell.execute_reply":"2022-08-14T02:26:41.594196Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# train = pd.concat([train, train_feature_matrix],axis=1)","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:41.596577Z","iopub.execute_input":"2022-08-14T02:26:41.596887Z","iopub.status.idle":"2022-08-14T02:26:41.602261Z","shell.execute_reply.started":"2022-08-14T02:26:41.596858Z","shell.execute_reply":"2022-08-14T02:26:41.600923Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# features = train.drop(['id','failure','product_code','attribute_1'],axis=1).columns\n# features","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:41.604144Z","iopub.execute_input":"2022-08-14T02:26:41.604786Z","iopub.status.idle":"2022-08-14T02:26:41.611058Z","shell.execute_reply.started":"2022-08-14T02:26:41.604742Z","shell.execute_reply":"2022-08-14T02:26:41.610276Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:41.612476Z","iopub.execute_input":"2022-08-14T02:26:41.613717Z","iopub.status.idle":"2022-08-14T02:26:41.665257Z","shell.execute_reply.started":"2022-08-14T02:26:41.613660Z","shell.execute_reply":"2022-08-14T02:26:41.664061Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"##scale num features\nscaler = MinMaxScaler()\n#train['measurement_17'] = scaler.fit_transform(train['measurement_17'])","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:41.666718Z","iopub.execute_input":"2022-08-14T02:26:41.667180Z","iopub.status.idle":"2022-08-14T02:26:41.672262Z","shell.execute_reply.started":"2022-08-14T02:26:41.667138Z","shell.execute_reply":"2022-08-14T02:26:41.671167Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Baseline - model comparison","metadata":{}},{"cell_type":"code","source":"# #Breaking the data and selecting features , predictors\n# X_train,X_test,y_train,y_test=train_test_split(train[features],train['failure'],test_size=0.2,random_state=42,stratify=train['failure'])\n    \n# #Checking the scores by using our function\n# algos=[RandomForestClassifier,DecisionTreeClassifier,KNeighborsClassifier, SVC, LogisticRegression, ExtraTreesClassifier, GradientBoostingClassifier, HistGradientBoostingClassifier]\n\n\n# #set up plotting area\n# plt.figure(figsize=(12, 12)).clf()\n\n# s = []\n# methods = ['RandomForestClassifier','DecisionTreeClassifier','KNeighborsClassifier',\n#       'SVC', 'LogisticRegression','ExtraTreesClassifier','GradientBoostingClassifier','HistGradientBoostingClassifier']\n\n# for i,a in enumerate(algos):\n#     print(a.__name__)\n#     if a.__name__ == 'SVC':\n#         model = a(probability=True)\n#     else:\n#         model = a()\n    \n#     model.fit(X_train, y_train)\n#     y_pred = model.predict(X_test)\n#     score = metrics.accuracy_score(y_test, y_pred)\n\n#     y_pred = model.predict_proba(X_test)[:, 1]\n#     fpr, tpr, _ = metrics.roc_curve(y_test, y_pred)\n#     auc = round(metrics.roc_auc_score(y_test, y_pred), 4)\n#     plt.plot(fpr,tpr,label=methods[i]+\", AUC=\"+str(auc))\n#     s.append(auc)\n    \n# #add legend\n# plt.legend()\n\n# models = pd.DataFrame({\n#     'Method': methods,\n#     'Score': [s[0],s[1],s[2],s[3],s[4],s[5],s[6],s[7]]})\n# models.sort_values(by='Score', ascending=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:41.673540Z","iopub.execute_input":"2022-08-14T02:26:41.674364Z","iopub.status.idle":"2022-08-14T02:26:41.683184Z","shell.execute_reply.started":"2022-08-14T02:26:41.674321Z","shell.execute_reply":"2022-08-14T02:26:41.682375Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Auto ML","metadata":{}},{"cell_type":"code","source":"# # Splitting data into training and test set\n# X_train, X_test, y_train, y_test = train_test_split(train[features], train['failure'],\n#                                                     train_size=0.75, test_size=0.25, shuffle=True)\n# X_train.shape, X_test.shape, y_train.shape, y_test.shape","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:41.684433Z","iopub.execute_input":"2022-08-14T02:26:41.684925Z","iopub.status.idle":"2022-08-14T02:26:41.695084Z","shell.execute_reply.started":"2022-08-14T02:26:41.684894Z","shell.execute_reply":"2022-08-14T02:26:41.693782Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# tpot = TPOTClassifier(generations=5, population_size=50, verbosity=2, random_state=42, scoring =  'roc_auc')\n# tpot.fit(X_train, y_train)\n# print(\"Accuracy is {}%\".format(tpot.score(X_test, y_test)*100))\n# tpot.export('tpot_digits_pipeline.py')","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:41.698427Z","iopub.execute_input":"2022-08-14T02:26:41.698774Z","iopub.status.idle":"2022-08-14T02:26:41.708934Z","shell.execute_reply.started":"2022-08-14T02:26:41.698742Z","shell.execute_reply":"2022-08-14T02:26:41.707852Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Infer Test","metadata":{}},{"cell_type":"code","source":"##product code aggs\npcagg = test.groupby('product_code')[num_features].agg(['min','max','mean','std','var','count'])\npcagg.columns = ['_pc_'.join(x) for x in pcagg.columns]\ntest = test.merge(pcagg, on='product_code')\n\n\n##attribute_0 code aggs\na0agg = test.groupby('attribute_0')[num_features].agg(['min','max','mean','std','var','count'])\na0agg.columns = ['_a0_'.join(x) for x in a0agg.columns]\ntest = test.merge(a0agg, on='attribute_0')\n\n##attribute_1 code aggs\na1agg = test.groupby('attribute_1')[num_features].agg(['min','max','mean','std','var','count'])\na1agg.columns = ['_a1_'.join(x) for x in a1agg.columns]\ntest = test.merge(a1agg, on='attribute_1')\n\n##attribute_2 code aggs\na2agg = test.groupby('attribute_2')[num_features].agg(['min','max','mean','std','var','count'])\na2agg.columns = ['_a2_'.join(x) for x in a2agg.columns]\ntest = test.merge(a2agg, on='attribute_2')\n\n##attribute_3 code aggs\na3agg = test.groupby('attribute_3')[num_features].agg(['min','max','mean','std','var','count'])\na3agg.columns = ['_a3_'.join(x) for x in a3agg.columns]\ntest = test.merge(a3agg, on='attribute_3')\n\ntest['loading_log'] = np.log10(test['loading'])\ntest['measurement_9_sq'] = test['measurement_9']**2\n\n# test['sum16'] = test[['measurement_1', 'measurement_2', 'measurement_3', 'measurement_4','measurement_5', 'measurement_6','measurement_7', 'measurement_8', 'measurement_9', 'measurement_10','measurement_11', 'measurement_12','measurement_13','measurement_14','measurement_15','measurement_16']].sum(axis=1)\n#test['sum17'] = test[['measurement_1', 'measurement_2', 'measurement_3', 'measurement_4','measurement_5', 'measurement_6','measurement_7', 'measurement_8', 'measurement_9', 'measurement_10','measurement_11', 'measurement_12','measurement_13','measurement_14','measurement_15','measurement_16','measurement_17']].sum(axis=1)\n\n# ##square num features\n# numsq = test[num_features]**2\n# numsq.add_suffix('_sq')\n# test = pd.concat([test,numsq],axis=1)\n\n\n#one hot encode attribute_0 only\ntest = pd.get_dummies(test,columns=['attribute_0'])\n\ntest[features] = imputer.transform(test[features])\n\n\n# test = pd.concat([test,test_feature_matrix],axis=1)\n\n#test['measurement_17'] = scaler.transform(test['measurement_17'])\ntest[features]\n","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:41.710123Z","iopub.execute_input":"2022-08-14T02:26:41.710828Z","iopub.status.idle":"2022-08-14T02:26:51.927704Z","shell.execute_reply.started":"2022-08-14T02:26:41.710796Z","shell.execute_reply":"2022-08-14T02:26:51.926590Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds = []\nam = []\nFOLDS = 5\n\nkf = StratifiedGroupKFold(n_splits=FOLDS, random_state=72, shuffle=True)#, random_state=SEED, shuffle=True\nfor fold,(train_index, test_index) in enumerate(kf.split(train[features], train['failure'], train['product_code'])):#, \n    X_train, X_test = train[features].loc[train_index], train[features].loc[test_index]\n    y_train, y_test = train['failure'][train_index], train['failure'][test_index]\n    model = LogisticRegression()\n    model.fit(X_train, y_train)\n    y_pred = model.predict_proba(X_test)[:, 1]\n    \n    score = metrics.roc_auc_score(y_test, y_pred)\n    am.append(score)\n    print(round(score, 4))\n    \n    \n    y_pred = model.predict_proba(test[features])[:, 1]\n    if fold==0: \n        preds = y_pred\n    else:\n        preds += y_pred\n\nprint('Avg. AUC score: ',np.mean(am))\npreds /= FOLDS\n\npreds","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:33:22.193620Z","iopub.execute_input":"2022-08-14T02:33:22.194001Z","iopub.status.idle":"2022-08-14T02:33:29.365626Z","shell.execute_reply.started":"2022-08-14T02:33:22.193975Z","shell.execute_reply":"2022-08-14T02:33:29.364101Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import shap  # package used to calculate Shap \nshap.initjs()\n\n# Create object that can calculate shap values\nexplainer = shap.LinearExplainer(model, X_train)\n\n# Calculate Shap values\nshap_values = explainer.shap_values(X_test)\nshap.summary_plot(shap_values, X_test, feature_names=features)","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:33:39.259967Z","iopub.execute_input":"2022-08-14T02:33:39.261102Z","iopub.status.idle":"2022-08-14T02:33:42.546235Z","shell.execute_reply.started":"2022-08-14T02:33:39.261050Z","shell.execute_reply":"2022-08-14T02:33:42.545067Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"shap.plots.bar(explainer(X_test)) ","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:33:56.496785Z","iopub.execute_input":"2022-08-14T02:33:56.497222Z","iopub.status.idle":"2022-08-14T02:33:57.114798Z","shell.execute_reply.started":"2022-08-14T02:33:56.497186Z","shell.execute_reply":"2022-08-14T02:33:57.113928Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# ## in the end: fit on all the data - keep the CV params\n# model = LogisticRegression()\n# model.fit(train[features], train['failure'])#.fillna(-127)\n# preds = model.predict_proba(test[features])[:, 1]","metadata":{"scrolled":true,"execution":{"iopub.status.busy":"2022-08-14T02:26:59.766380Z","iopub.status.idle":"2022-08-14T02:26:59.766744Z","shell.execute_reply.started":"2022-08-14T02:26:59.766556Z","shell.execute_reply":"2022-08-14T02:26:59.766573Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub = pd.DataFrame(index = test['id'], data={'failure': preds})\nsub.to_csv(f'submission.csv',index=True)\nsub","metadata":{"execution":{"iopub.status.busy":"2022-08-14T02:26:59.767689Z","iopub.status.idle":"2022-08-14T02:26:59.768111Z","shell.execute_reply.started":"2022-08-14T02:26:59.767869Z","shell.execute_reply":"2022-08-14T02:26:59.767885Z"},"trusted":true},"execution_count":null,"outputs":[]}]}