{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Setup"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np \nimport pandas as pd\n\nfrom catboost import CatBoostRegressor, Pool\nfrom catboost.eval.catboost_evaluation import *\n\nfrom plotly.offline import iplot, init_notebook_mode\ninit_notebook_mode(connected=False)\n\nimport os\nprint(os.listdir(\"../input\"))\nprint(os.listdir(\"../input/LANL-Earthquake-Prediction\"))\nprint(os.listdir(\"../input/lanl-features\"))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Read Data"},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"X = pd.read_csv('../input/lanl-features/train_features.csv')\nX_test = pd.read_csv('../input/lanl-features/test_features.csv')\ny = pd.read_csv('../input/lanl-features/y.csv')\nsubmission = pd.read_csv('../input/LANL-Earthquake-Prediction/sample_submission.csv')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Save Train data"},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train = y.join(X)\ndf_train.to_csv('train.csv', header=False, index=False)\ndf_train","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Learning Parameters"},{"metadata":{"trusted":true},"cell_type":"code","source":"learn_params = {'iterations': 10, \n                'random_seed': 0, \n                'logging_level': 'Silent',\n                'loss_function': 'MAE',\n                # You could set learning process to GPU\n                #'devices': '1',  \n                'task_type': 'GPU',                \n                'boosting_type': 'Ordered', \n                # For feature evaluation learning time is important and we need just the relative quality\n                'max_ctr_complexity' : 4}","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Features To Evaluate"},{"metadata":{"trusted":true},"cell_type":"code","source":"features_to_evaluate = [i for i in range(50)]\nfeatures_to_evaluate","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Create Description file for features"},{"metadata":{"trusted":true},"cell_type":"code","source":"from catboost.utils import create_cd\n\nfeature_names = dict()\nfor column, name in enumerate(df_train):\n    if column == 0:\n        continue\n    feature_names[column - 1] = name\n    \ncreate_cd(\n    label=0, \n    cat_features=[477, 804, 981],\n    feature_names=feature_names,\n    output_path='train.cd'\n)\n!cat 'train.cd'","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Catboost Evaluation"},{"metadata":{"trusted":true},"cell_type":"code","source":"fold_size = X.shape[0]//2\nfold_offset = 0\nfolds_count = 5\nrandom_seed = 1\n\nevaluator = CatboostEvaluation('train.csv',\n                               fold_size,\n                               folds_count,\n                               delimiter=',',\n                               column_description='train.cd',\n                               partition_random_seed=random_seed,\n                               #working_dir=...  — working directory, we will need to create temp files during evaluation, \n                               #so ensure you have enough free space. \n                               #By default we will create unique temp dir in system temp directory\n                               #group_column=... — set it if you have column which should be used to split \n)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"%%time\nresult = evaluator.eval_features(learn_config=learn_params,\n                                 eval_metrics=[\"MAE\"],\n                                 features_to_eval=features_to_evaluate)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"MAE_result = result.get_metric_results(\"MAE\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#MAE_result.get_baseline_comparison()\nMAE_result.","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"iplot(MAE_result.create_fold_learning_curves(0))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"baseline_case = MAE_result.get_baseline_case()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"baseline_case","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"baseline_result = MAE_result.get_case_result(baseline_case)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"iplot(baseline_result.create_learning_curves_plot())","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# Choose learning rate"},{"metadata":{"trusted":true},"cell_type":"code","source":"learning_rate_params = learn_params","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"baseline_case = ExecutionCase(label=\"Step {}\".format(0.03),\n                              params=learning_rate_params, \n                              learning_rate=0.03)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"other_learning_rate_cases = [ExecutionCase(label=\"Step {}\".format(step), \n                                           params=learning_rate_params, \n                                           learning_rate=step) for step in [0.05, 0.015]]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"evaluator = CatboostEvaluation('train.csv',\n                               fold_size, \n                               fold_count=1,  #For learning rate estimation we need just 1 fold\n                               delimiter=',',\n                               column_description='train.cd',\n                               partition_random_seed=random_seed)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"evaluator.get_working_dir()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"learning_rates_result = evaluator.eval_cases(baseline_case, \n                                             other_learning_rate_cases,\n                                             eval_metrics=\"MAE\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"MAE_learning_rate_search_results = learning_rates_result.get_metric_results(\"MAE\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"tmp = MAE_learning_rate_search_results.create_fold_learning_curves(fold=0, offset=200)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"iplot(tmp)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}