{"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":"markdown","source":"<h3>all imports","metadata":{}},{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings(\"ignore\")","metadata":{"execution":{"iopub.status.busy":"2022-08-02T17:42:37.920835Z","iopub.execute_input":"2022-08-02T17:42:37.921227Z","iopub.status.idle":"2022-08-02T17:42:37.927096Z","shell.execute_reply.started":"2022-08-02T17:42:37.921196Z","shell.execute_reply":"2022-08-02T17:42:37.925620Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import 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\nfrom sklearn.experimental import enable_iterative_imputer\nfrom sklearn.impute import KNNImputer, SimpleImputer, IterativeImputer\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.preprocessing import OneHotEncoder\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import roc_auc_score","metadata":{"execution":{"iopub.status.busy":"2022-08-02T17:50:35.942127Z","iopub.execute_input":"2022-08-02T17:50:35.943252Z","iopub.status.idle":"2022-08-02T17:50:35.956083Z","shell.execute_reply.started":"2022-08-02T17:50:35.943212Z","shell.execute_reply":"2022-08-02T17:50:35.955012Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv('../input/tabular-playground-series-aug-2022/train.csv')\ntest_df = pd.read_csv('../input/tabular-playground-series-aug-2022/test.csv')","metadata":{"execution":{"iopub.status.busy":"2022-08-02T15:46:41.187771Z","iopub.execute_input":"2022-08-02T15:46:41.188168Z","iopub.status.idle":"2022-08-02T15:46:41.393116Z","shell.execute_reply.started":"2022-08-02T15:46:41.188137Z","shell.execute_reply":"2022-08-02T15:46:41.391557Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-08-02T15:46:48.374587Z","iopub.execute_input":"2022-08-02T15:46:48.374996Z","iopub.status.idle":"2022-08-02T15:46:48.423579Z","shell.execute_reply.started":"2022-08-02T15:46:48.374963Z","shell.execute_reply":"2022-08-02T15:46:48.422113Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<h3>OneHot Encoding ","metadata":{}},{"cell_type":"markdown","source":"Label Encoding by encoding the categories with numbers and leaving them in one column, implicitly sets the order of the data","metadata":{}},{"cell_type":"code","source":"categorical_features = ['product_code', 'attribute_0', 'attribute_1']","metadata":{"execution":{"iopub.status.busy":"2022-08-02T16:35:05.531998Z","iopub.execute_input":"2022-08-02T16:35:05.532400Z","iopub.status.idle":"2022-08-02T16:35:05.537712Z","shell.execute_reply.started":"2022-08-02T16:35:05.532365Z","shell.execute_reply":"2022-08-02T16:35:05.536521Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"onehot_encoder = OneHotEncoder()","metadata":{"execution":{"iopub.status.busy":"2022-08-02T16:31:34.033888Z","iopub.execute_input":"2022-08-02T16:31:34.034337Z","iopub.status.idle":"2022-08-02T16:31:34.040237Z","shell.execute_reply.started":"2022-08-02T16:31:34.034301Z","shell.execute_reply":"2022-08-02T16:31:34.038589Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# concatenate dataframes\nall_df = pd.concat([train_df.drop(columns='failure'), test_df])","metadata":{"execution":{"iopub.status.busy":"2022-08-02T16:37:40.334072Z","iopub.execute_input":"2022-08-02T16:37:40.334786Z","iopub.status.idle":"2022-08-02T16:37:40.376690Z","shell.execute_reply.started":"2022-08-02T16:37:40.334750Z","shell.execute_reply":"2022-08-02T16:37:40.375776Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# fit onehot by all dataframe\nonehot_encoder.fit(all_df[categorical_features])\n\n# transform train df \ntrain_df_onehot = onehot_encoder.transform(train_df[categorical_features]).toarray()\n\n# transform train df \ntest_df_onehot = onehot_encoder.transform(test_df[categorical_features]).toarray()\n\n# names of new features to variable\ncolumns = onehot_encoder.get_feature_names_out(categorical_features)\ncolumns","metadata":{"execution":{"iopub.status.busy":"2022-08-02T16:37:54.702390Z","iopub.execute_input":"2022-08-02T16:37:54.702830Z","iopub.status.idle":"2022-08-02T16:37:54.761069Z","shell.execute_reply.started":"2022-08-02T16:37:54.702747Z","shell.execute_reply":"2022-08-02T16:37:54.759881Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(train_df_onehot[0]), len(test_df_onehot[0])","metadata":{"execution":{"iopub.status.busy":"2022-08-02T16:38:55.267751Z","iopub.execute_input":"2022-08-02T16:38:55.268497Z","iopub.status.idle":"2022-08-02T16:38:55.275975Z","shell.execute_reply.started":"2022-08-02T16:38:55.268458Z","shell.execute_reply":"2022-08-02T16:38:55.274629Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df_onehot = pd.DataFrame(train_df_onehot, columns=columns)\ntest_df_onehot = pd.DataFrame(test_df_onehot, columns=columns)","metadata":{"execution":{"iopub.status.busy":"2022-08-02T16:47:10.804477Z","iopub.execute_input":"2022-08-02T16:47:10.805451Z","iopub.status.idle":"2022-08-02T16:47:10.811165Z","shell.execute_reply.started":"2022-08-02T16:47:10.805408Z","shell.execute_reply":"2022-08-02T16:47:10.810243Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# concatenate one hot table with original table\ntrain_df_new = pd.concat([train_df, train_df_onehot], axis=1)\ntest_df_new = pd.concat([test_df, test_df_onehot], axis=1)\n\n# delete categorical features\ntrain_df_new = train_df_new.drop(columns=categorical_features)\ntest_df_new = test_df_new.drop(columns=categorical_features)","metadata":{"execution":{"iopub.status.busy":"2022-08-02T16:47:12.063647Z","iopub.execute_input":"2022-08-02T16:47:12.064069Z","iopub.status.idle":"2022-08-02T16:47:12.101557Z","shell.execute_reply.started":"2022-08-02T16:47:12.064033Z","shell.execute_reply":"2022-08-02T16:47:12.100228Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(list(train_df_new)), len(list(test_df_new))","metadata":{"execution":{"iopub.status.busy":"2022-08-02T16:53:36.703372Z","iopub.execute_input":"2022-08-02T16:53:36.704048Z","iopub.status.idle":"2022-08-02T16:53:36.711919Z","shell.execute_reply.started":"2022-08-02T16:53:36.704003Z","shell.execute_reply":"2022-08-02T16:53:36.710693Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df_new.info()","metadata":{"execution":{"iopub.status.busy":"2022-08-02T16:54:22.656885Z","iopub.execute_input":"2022-08-02T16:54:22.657309Z","iopub.status.idle":"2022-08-02T16:54:22.675567Z","shell.execute_reply.started":"2022-08-02T16:54:22.657276Z","shell.execute_reply":"2022-08-02T16:54:22.674412Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<h2>check NaN in data","metadata":{}},{"cell_type":"code","source":"pd.DataFrame({'train_df': train_df_new.isnull().sum(),\n              'test_df': test_df_new.isnull().sum()})","metadata":{"execution":{"iopub.status.busy":"2022-08-02T16:54:31.052574Z","iopub.execute_input":"2022-08-02T16:54:31.053014Z","iopub.status.idle":"2022-08-02T16:54:31.077996Z","shell.execute_reply.started":"2022-08-02T16:54:31.052978Z","shell.execute_reply":"2022-08-02T16:54:31.076629Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"As you can see, the number of gaps in features is increasing","metadata":{}},{"cell_type":"markdown","source":"<h2> Fill NaN","metadata":{}},{"cell_type":"markdown","source":"<h3>SimpleImputer","metadata":{}},{"cell_type":"markdown","source":"try SimpleImputer\n\nImputation transformer for completing missing values","metadata":{}},{"cell_type":"markdown","source":"create 'mean', 'median' and 'most_frequent' imputers for test with Logistic Regression","metadata":{}},{"cell_type":"code","source":"imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')\nimp_median = SimpleImputer(missing_values=np.nan, strategy='median')\nimp_freq = SimpleImputer(missing_values=np.nan, strategy='most_frequent')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"concatenate dataframes for fitting imputers","metadata":{}},{"cell_type":"code","source":"imp_fit_df = pd.concat([train_df_new, test_df_new])","metadata":{"execution":{"iopub.status.busy":"2022-08-02T17:19:38.210167Z","iopub.execute_input":"2022-08-02T17:19:38.210556Z","iopub.status.idle":"2022-08-02T17:19:38.225175Z","shell.execute_reply.started":"2022-08-02T17:19:38.210524Z","shell.execute_reply":"2022-08-02T17:19:38.224057Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"fit imputers ","metadata":{}},{"cell_type":"code","source":"imp_mean.fit(imp_fit_df)\nimp_median.fit(imp_fit_df)\nimp_freq.fit(imp_fit_df)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"create dataframes with no NaN ","metadata":{}},{"cell_type":"code","source":"train_df_mean = pd.DataFrame(imp_mean.transform(train_df_new), columns=list(train_df_new))\ntrain_df_median = pd.DataFrame(imp_median.transform(train_df_new), columns=list(train_df_new))\ntrain_df_freq = pd.DataFrame(imp_freq.transform(train_df_new), columns=list(train_df_new))","metadata":{"execution":{"iopub.status.busy":"2022-08-02T17:19:42.360711Z","iopub.execute_input":"2022-08-02T17:19:42.361100Z","iopub.status.idle":"2022-08-02T17:19:42.415930Z","shell.execute_reply.started":"2022-08-02T17:19:42.361068Z","shell.execute_reply":"2022-08-02T17:19:42.414885Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df_new['failure'] = 0","metadata":{"execution":{"iopub.status.busy":"2022-08-02T17:19:44.130004Z","iopub.execute_input":"2022-08-02T17:19:44.130409Z","iopub.status.idle":"2022-08-02T17:19:44.136827Z","shell.execute_reply.started":"2022-08-02T17:19:44.130378Z","shell.execute_reply":"2022-08-02T17:19:44.135831Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df_mean = pd.DataFrame(imp_mean.transform(test_df_new), columns=list(test_df_new)).drop(columns='failure')\ntest_df_median = pd.DataFrame(imp_median.transform(test_df_new), columns=list(test_df_new)).drop(columns='failure')\ntest_df_freq = pd.DataFrame(imp_freq.transform(test_df_new), columns=list(test_df_new)).drop(columns='failure')","metadata":{"execution":{"iopub.status.busy":"2022-08-02T17:20:03.333877Z","iopub.execute_input":"2022-08-02T17:20:03.334396Z","iopub.status.idle":"2022-08-02T17:20:03.386784Z","shell.execute_reply.started":"2022-08-02T17:20:03.334353Z","shell.execute_reply":"2022-08-02T17:20:03.385377Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<h4>function to create datasets with filled gaps","metadata":{}},{"cell_type":"code","source":"def fillNaN(imputer, train_df, test_df):\n    imp_fit_df = pd.concat([train_df, test_df])\n    imputer.fit(imp_fit_df)\n    \n    train_df = pd.DataFrame(imputer.transform(train_df), columns=list(train_df))\n    \n    test_df['failure'] = 0\n    test_df = pd.DataFrame(imputer.transform(test_df), columns=list(test_df)).drop(columns='failure')\n    \n    return train_df, test_df","metadata":{"execution":{"iopub.status.busy":"2022-08-02T17:41:32.617906Z","iopub.execute_input":"2022-08-02T17:41:32.618381Z","iopub.status.idle":"2022-08-02T17:41:32.627414Z","shell.execute_reply.started":"2022-08-02T17:41:32.618343Z","shell.execute_reply":"2022-08-02T17:41:32.625688Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<h2> create a lot of imputers","metadata":{}},{"cell_type":"code","source":"# simple imputers\nimp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')\nimp_median = SimpleImputer(missing_values=np.nan, strategy='median')\nimp_freq = SimpleImputer(missing_values=np.nan, strategy='most_frequent')\nimp_const0 = SimpleImputer(missing_values=np.nan, strategy='constant', fill_value=0)\n\n# knn imputers\nimp_knn5 = KNNImputer(missing_values=np.nan, n_neighbors=5)\nimp_knn2 = KNNImputer(missing_values=np.nan, n_neighbors=2)\n\n#iterative imputer\nimp_iter = IterativeImputer(missing_values=np.nan)","metadata":{"execution":{"iopub.status.busy":"2022-08-02T18:33:53.671071Z","iopub.execute_input":"2022-08-02T18:33:53.671556Z","iopub.status.idle":"2022-08-02T18:33:53.679877Z","shell.execute_reply.started":"2022-08-02T18:33:53.671509Z","shell.execute_reply":"2022-08-02T18:33:53.678365Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for imputer in [imp_mean, imp_median, imp_freq, imp_const0, imp_iter]:\n    train_df, test_df = fillNaN(imputer, train_df_new, test_df_new)\n    X_train, X_test, y_train, y_test = train_test_split(train_df.drop(columns=['failure']), train_df['failure'], test_size=0.2, random_state=0)\n    lin_reg = LogisticRegression(random_state=0).fit(X_train, y_train)\n    print(imputer, roc_auc_score(y_test, lin_reg.predict_proba(X_test)[:, 1]))","metadata":{"execution":{"iopub.status.busy":"2022-08-02T18:37:22.352985Z","iopub.execute_input":"2022-08-02T18:37:22.353446Z","iopub.status.idle":"2022-08-02T18:37:48.949808Z","shell.execute_reply.started":"2022-08-02T18:37:22.353412Z","shell.execute_reply":"2022-08-02T18:37:48.948560Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":" best is 'SimpleImputer(strategy='most_frequent')'","metadata":{}},{"cell_type":"markdown","source":"<h2>fit model and predict test dataframe","metadata":{}},{"cell_type":"code","source":"imp_freq = SimpleImputer(missing_values=np.nan, strategy='most_frequent')","metadata":{"execution":{"iopub.status.busy":"2022-08-02T18:40:30.689565Z","iopub.execute_input":"2022-08-02T18:40:30.689996Z","iopub.status.idle":"2022-08-02T18:40:30.694547Z","shell.execute_reply.started":"2022-08-02T18:40:30.689962Z","shell.execute_reply":"2022-08-02T18:40:30.693676Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df, test_df = fillNaN(imp_freq, train_df_new, test_df_new)\nX_train, X_test, y_train, y_test = train_test_split(train_df.drop(columns=['failure']), train_df['failure'], test_size=0.2, random_state=0)\nlog_reg = LogisticRegression(random_state=0).fit(X_train, y_train)\nprint(imputer, roc_auc_score(y_test, lin_reg.predict_proba(X_test)[:, 1]))","metadata":{"execution":{"iopub.status.busy":"2022-08-02T18:40:31.867689Z","iopub.execute_input":"2022-08-02T18:40:31.868460Z","iopub.status.idle":"2022-08-02T18:40:32.677281Z","shell.execute_reply.started":"2022-08-02T18:40:31.868419Z","shell.execute_reply":"2022-08-02T18:40:32.675504Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds = log_reg.predict_proba(test_df)[:, 1]","metadata":{"execution":{"iopub.status.busy":"2022-08-02T18:40:33.842575Z","iopub.execute_input":"2022-08-02T18:40:33.843006Z","iopub.status.idle":"2022-08-02T18:40:33.853289Z","shell.execute_reply.started":"2022-08-02T18:40:33.842970Z","shell.execute_reply":"2022-08-02T18:40:33.851656Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df = pd.read_csv(\"../input/tabular-playground-series-aug-2022/sample_submission.csv\")\nsub_df[\"failure\"] = preds\nsub_df","metadata":{"execution":{"iopub.status.busy":"2022-08-02T18:40:36.470551Z","iopub.execute_input":"2022-08-02T18:40:36.471291Z","iopub.status.idle":"2022-08-02T18:40:36.502197Z","shell.execute_reply.started":"2022-08-02T18:40:36.471250Z","shell.execute_reply":"2022-08-02T18:40:36.500627Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-02T18:40:40.945181Z","iopub.execute_input":"2022-08-02T18:40:40.946478Z","iopub.status.idle":"2022-08-02T18:40:41.003480Z","shell.execute_reply.started":"2022-08-02T18:40:40.946437Z","shell.execute_reply":"2022-08-02T18:40:41.001995Z"},"trusted":true},"execution_count":null,"outputs":[]}]}