{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Basic imports"},{"metadata":{"trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os\nimport random","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Seed all"},{"metadata":{"trusted":true},"cell_type":"code","source":"global_session_id = 0\n\ndef seed_everything(seed=2020):\n    random.seed(seed)\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    np.random.seed(seed)\n    global global_session_id\n    global_session_id = seed\n    \nseed_everything(13)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Set variables"},{"metadata":{"trusted":true},"cell_type":"code","source":"base_dir = '/kaggle/input/osic-pulmonary-fibrosis-progression'\n\nsubmission_file_name = 'submission.csv'","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Train raw"},{"metadata":{"scrolled":true,"trusted":true},"cell_type":"code","source":"train_raw = pd.read_csv(os.path.join(base_dir, 'train.csv'))\n\ntrain_raw.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Inference raw"},{"metadata":{"scrolled":false,"trusted":true},"cell_type":"code","source":"inference_raw = pd.read_csv(os.path.join(base_dir, 'test.csv'))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Submission raw"},{"metadata":{"scrolled":false,"trusted":true},"cell_type":"code","source":"submission_raw = pd.read_csv(os.path.join(base_dir, 'sample_submission.csv'))\n\nsubmission_raw.head()","execution_count":null,"outputs":[]},{"metadata":{"scrolled":true,"trusted":true},"cell_type":"code","source":"submission = submission_raw.copy()\n\nsubmission['Patient'] = submission['Patient_Week'].apply(lambda x:x.split('_')[0])\nsubmission['Weeks'] = submission['Patient_Week'].apply(lambda x: int(x.split('_')[-1]))\n\nsubmission.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Join submission and inference dataframes"},{"metadata":{"scrolled":true,"trusted":true},"cell_type":"code","source":"submission_test = pd.merge(inference_raw, submission, on='Patient', how='inner')\n\nsubmission_test.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Introduce baseline features for test/submission"},{"metadata":{"scrolled":false,"trusted":true},"cell_type":"code","source":"submission_test['bl_Weeks'] = submission_test['Weeks_y'] - submission_test['Weeks_x']\nsubmission_test = submission_test[['Patient', 'Patient_Week', 'Weeks_y', 'Age', 'Sex', 'SmokingStatus', 'bl_Weeks', 'FVC_x']]\n\nsubmission_test.rename(columns = {'FVC_x' : 'bl_FVC'}, inplace = True)\nsubmission_test.rename(columns = {'Weeks_y' : 'Weeks'}, inplace = True)\n\nsubmission_test.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Introduce baseline features for train"},{"metadata":{"trusted":true},"cell_type":"code","source":"train = train_raw.copy()\ntrain['min_Weeks'] = train.groupby('Patient')['Weeks'].transform('min')\ntrain['bl_Weeks'] = train['Weeks'] - train['min_Weeks']\n\ntrain['bl_FVC'] = 0\n\nfor i, row in train.iterrows():\n    a = train.loc[train['Patient'] == row['Patient']]\n    a = a.loc[a['bl_Weeks'] == 0]\n    train.at[i,'bl_FVC'] = a['FVC'].values[0]\n    \ntrain = train[['Patient', 'Age', 'Sex', 'SmokingStatus', 'bl_Weeks', 'bl_FVC', 'FVC']]\n\ntrain.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Start pycaret"},{"metadata":{"trusted":true},"cell_type":"code","source":"!pip install pycaret","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from pycaret.regression import *\nclf1 = setup(\n    train, \n    target = 'FVC',\n    ignore_features = ['Patient'],\n    normalize = True, \n    transform_target = True, \n    # polynomial_features = True,\n    feature_selection = True, \n    train_size=0.8,\n    # categorical_features=['Hour'],\n    session_id = global_session_id,\n    # log_experiment=True,\n    # log_plots=True,\n    use_gpu=True,\n    silent=True,\n    # experiment_name='jb-ex-v01'\n)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Train and select best model"},{"metadata":{"trusted":true},"cell_type":"code","source":"top5 = compare_models(n_select = 5) ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tuned_top5 = [tune_model(i) for i in top5]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"bagged_top5 = [ensemble_model(i) for i in tuned_top5]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"blender = blend_models(estimator_list = top5) ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"best = automl()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"save_model(best, 'jb-model-v01')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Inferences and submission"},{"metadata":{"trusted":true},"cell_type":"code","source":"sub_ds = submission_test[['Patient', 'Age', 'Sex', 'SmokingStatus', 'bl_Weeks', 'bl_FVC']]\nsub_ds","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_sub_ds = predict_model(best, data=sub_ds)\n\ny_sub_ds","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_final = pd.DataFrame()\n\ny_final['Patient_Week'] = submission_test['Patient_Week'].values\ny_final['FVC'] = y_sub_ds['Label'].values\ny_final['Confidence'] = 95.93 # Best model\n\ny_final","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_final.to_csv('submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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":4,"nbformat_minor":4}