{"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":"# LightGBM TPS August 2022","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport lightgbm as lgb\nimport matplotlib.pyplot as plt\n\nfrom sklearn.preprocessing import OneHotEncoder\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.model_selection import StratifiedKFold","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-input":true,"_kg_hide-output":true,"execution":{"iopub.status.busy":"2022-08-01T15:45:18.904570Z","iopub.execute_input":"2022-08-01T15:45:18.905542Z","iopub.status.idle":"2022-08-01T15:45:18.912133Z","shell.execute_reply.started":"2022-08-01T15:45:18.905493Z","shell.execute_reply":"2022-08-01T15:45:18.910920Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Data","metadata":{}},{"cell_type":"code","source":"train = pd.read_csv('../input/tabular-playground-series-aug-2022/train.csv')\ntest = pd.read_csv('../input/tabular-playground-series-aug-2022/test.csv')\nsub = pd.read_csv('../input/tabular-playground-series-aug-2022/sample_submission.csv')","metadata":{"execution":{"iopub.status.busy":"2022-08-01T15:45:19.664072Z","iopub.execute_input":"2022-08-01T15:45:19.664814Z","iopub.status.idle":"2022-08-01T15:45:19.847534Z","shell.execute_reply.started":"2022-08-01T15:45:19.664769Z","shell.execute_reply":"2022-08-01T15:45:19.846193Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.describe().T","metadata":{"execution":{"iopub.status.busy":"2022-08-01T15:45:19.899694Z","iopub.execute_input":"2022-08-01T15:45:19.900082Z","iopub.status.idle":"2022-08-01T15:45:20.005321Z","shell.execute_reply.started":"2022-08-01T15:45:19.900050Z","shell.execute_reply":"2022-08-01T15:45:20.004237Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Feature Engineering","metadata":{}},{"cell_type":"code","source":"train.drop(columns=['id'], inplace=True)\ntest.drop(columns=['id'], inplace=True)","metadata":{"execution":{"iopub.status.busy":"2022-08-01T15:45:20.628353Z","iopub.execute_input":"2022-08-01T15:45:20.628734Z","iopub.status.idle":"2022-08-01T15:45:20.639804Z","shell.execute_reply.started":"2022-08-01T15:45:20.628704Z","shell.execute_reply":"2022-08-01T15:45:20.638764Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"float_columns = train.select_dtypes(include=[float]).columns\none_hot_columns = set(list(train.columns)) - set(list(float_columns)) - set(list(['failure']))","metadata":{"execution":{"iopub.status.busy":"2022-08-01T15:46:37.975100Z","iopub.execute_input":"2022-08-01T15:46:37.975487Z","iopub.status.idle":"2022-08-01T15:46:37.983659Z","shell.execute_reply.started":"2022-08-01T15:46:37.975459Z","shell.execute_reply":"2022-08-01T15:46:37.982734Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"encoders = {}\n\nfor col in one_hot_columns:\n    enc = OneHotEncoder(handle_unknown='ignore')\n    enc.fit(train[col].values.reshape(-1, 1))\n    encoders[col] = enc","metadata":{"execution":{"iopub.status.busy":"2022-08-01T15:46:38.720427Z","iopub.execute_input":"2022-08-01T15:46:38.721240Z","iopub.status.idle":"2022-08-01T15:46:38.732988Z","shell.execute_reply.started":"2022-08-01T15:46:38.721207Z","shell.execute_reply":"2022-08-01T15:46:38.732017Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_df_encoding(data, encoders):\n    \n    df = pd.DataFrame()\n\n    for col in one_hot_columns:\n        header_cols = encoders[col].get_feature_names_out([col])\n        arr = encoders[col].transform(data[col].values.reshape(-1, 1)).toarray()\n        df = pd.concat([df, pd.DataFrame(arr, columns=header_cols)], axis=1)\n\n    return df","metadata":{"execution":{"iopub.status.busy":"2022-08-01T15:46:39.398879Z","iopub.execute_input":"2022-08-01T15:46:39.400072Z","iopub.status.idle":"2022-08-01T15:46:39.407908Z","shell.execute_reply.started":"2022-08-01T15:46:39.400024Z","shell.execute_reply":"2022-08-01T15:46:39.406767Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"features = pd.concat([train[float_columns], get_df_encoding(train, encoders)], axis=1)\nlabels = train['failure']\n\ntest_prep = pd.concat([test[float_columns], get_df_encoding(test, encoders)], axis=1)\n\nnew_one_hot_columns = set(features.columns) - set(float_columns)","metadata":{"execution":{"iopub.status.busy":"2022-08-01T15:46:39.938393Z","iopub.execute_input":"2022-08-01T15:46:39.939055Z","iopub.status.idle":"2022-08-01T15:46:40.098449Z","shell.execute_reply.started":"2022-08-01T15:46:39.938990Z","shell.execute_reply":"2022-08-01T15:46:40.097314Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Verify imbalance","metadata":{}},{"cell_type":"code","source":"x = [len(labels[labels==0]), len(labels[labels==1])]\nplt_labels = ['Negative', 'Positive']\n\nfig, ax = plt.subplots()\nax.pie(x, labels = plt_labels)\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-08-01T15:46:41.562346Z","iopub.execute_input":"2022-08-01T15:46:41.562746Z","iopub.status.idle":"2022-08-01T15:46:41.646535Z","shell.execute_reply.started":"2022-08-01T15:46:41.562707Z","shell.execute_reply":"2022-08-01T15:46:41.645382Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## KFold Training","metadata":{}},{"cell_type":"code","source":"n_splits = 5\nskf = StratifiedKFold(n_splits=n_splits)\noof_preds = np.zeros((n_splits, len(test)))\n\nfor i, (train_index, test_index) in enumerate(skf.split(features, labels)):\n    X_train, X_test = features.iloc[train_index], features.iloc[test_index]\n    y_train, y_test = labels.iloc[train_index], labels.iloc[test_index]\n    \n    scaler = StandardScaler().fit(X_train[float_columns])\n    temp_train_float = pd.DataFrame(scaler.transform(X_train[float_columns]), columns=float_columns)\n    temp_test_float = pd.DataFrame(scaler.transform(test_prep[float_columns]), columns=float_columns)\n    \n    train_df = np.hstack((X_train[new_one_hot_columns].values, temp_train_float.values))\n    test_df = np.hstack((test_prep[new_one_hot_columns].values, temp_test_float.values))\n    \n    clf = lgb.LGBMClassifier()\n    clf.fit(train_df, y_train.values)\n    \n    oof_preds[i] = clf.predict(test_df)","metadata":{"execution":{"iopub.status.busy":"2022-08-01T15:46:43.219188Z","iopub.execute_input":"2022-08-01T15:46:43.220234Z","iopub.status.idle":"2022-08-01T15:46:46.235899Z","shell.execute_reply.started":"2022-08-01T15:46:43.220194Z","shell.execute_reply":"2022-08-01T15:46:46.234937Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Submission","metadata":{}},{"cell_type":"code","source":"sub['failure'] = np.mean(oof_preds, axis=0)\nsub.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-01T15:41:08.379418Z","iopub.execute_input":"2022-08-01T15:41:08.380008Z","iopub.status.idle":"2022-08-01T15:41:08.416872Z","shell.execute_reply.started":"2022-08-01T15:41:08.379968Z","shell.execute_reply":"2022-08-01T15:41:08.415958Z"},"trusted":true},"execution_count":null,"outputs":[]}]}