{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import gc\nimport os\nimport time\nimport logging\nimport datetime\nimport warnings\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport xgboost as xgb\nimport lightgbm as lgb\nfrom scipy import stats\nfrom scipy.signal import hann\nfrom tqdm import tqdm_notebook\nimport matplotlib.pyplot as plt\nfrom scipy.signal import hilbert\nfrom scipy.signal import convolve\nfrom sklearn.svm import NuSVR, SVR\nfrom catboost import CatBoostRegressor\nfrom sklearn.kernel_ridge import KernelRidge\nfrom sklearn.metrics import mean_squared_error\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.metrics import mean_absolute_error\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.model_selection import KFold,StratifiedKFold, RepeatedKFold\nwarnings.filterwarnings(\"ignore\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e89326874fc9811397b7a604e00313a4f417e906"},"cell_type":"code","source":"%%time\npath = '../input/'\ntrain_file = os.path.join(path,'train.csv')\ntrain = pd.read_csv(train_file, dtype={'acoustic_data': np.int16, 'time_to_failure': np.float32})","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bdbe58467ffc3a518684d70d5e9857e1772f01bb"},"cell_type":"code","source":"train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fe858b228406eac9528bbef331d805cf247d2cab"},"cell_type":"code","source":"pd.options.display.precision = 15\ntrain.head(10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b17fae2c6a71ef91bd5d02b301db0809bfab309b"},"cell_type":"code","source":"def plot_acc_ttf_data(train_ad_sample_df, train_ttf_sample_df, title=\"Acoustic data and time to failure: 1% sampled data\"):\n    fig, ax1 = plt.subplots(figsize=(12, 8))\n    plt.title(title)\n    plt.plot(train_ad_sample_df, color='r')\n    ax1.set_ylabel('acoustic data', color='r')\n    plt.legend(['acoustic data'], loc=(0.01, 0.95))\n    ax2 = ax1.twinx()\n    plt.plot(train_ttf_sample_df, color='b')\n    ax2.set_ylabel('time to failure', color='b')\n    plt.legend(['time to failure'], loc=(0.01, 0.9))\n    plt.grid(True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"15adb90f598c241f8b53652de3fda51ed67faab8"},"cell_type":"code","source":"train_ad_sample_df = train['acoustic_data'].values[::100]\ntrain_ttf_sample_df = train['time_to_failure'].values[::100]\nplot_acc_ttf_data(train_ad_sample_df, train_ttf_sample_df)\ndel train_ad_sample_df\ndel train_ttf_sample_df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"97d4ea3827a07e02321597788a51922f15533f55"},"cell_type":"code","source":"rows = 150000\nsegments = int(np.floor(train.shape[0] / rows))\nX_tr = pd.DataFrame(index=range(segments), dtype=np.float64)\ny_tr = pd.DataFrame(index=range(segments), dtype=np.float64,\n                       columns=['time_to_failure'])\n\nfor segment in tqdm_notebook(range(segments)):\n    seg = train.iloc[segment*rows:segment*rows+rows]\n    x_raw = seg['acoustic_data']\n    x = x_raw.values\n    y = seg['time_to_failure'].values[-1]\n    \n    y_tr.loc[segment, 'time_to_failure'] = y\n    X_tr.loc[segment, 'ave'] = x.mean()\n    X_tr.loc[segment, 'std'] = x.std()\n    X_tr.loc[segment, 'max'] = x.max()\n    X_tr.loc[segment, 'min'] = x.min()\n    X_tr.loc[segment, 'q01'] = np.quantile(x,0.01)\n    X_tr.loc[segment, 'q05'] = np.quantile(x,0.05)\n    X_tr.loc[segment, 'q95'] = np.quantile(x,0.95)\n    X_tr.loc[segment, 'q99'] = np.quantile(x,0.99)\n    X_tr.loc[segment, 'abs_median'] = np.median(np.abs(x))\n    X_tr.loc[segment, 'abs_q95'] = np.quantile(np.abs(x),0.95)\n    X_tr.loc[segment, 'abs_q99'] = np.quantile(np.abs(x),0.99)\n    X_tr.loc[segment, 'F_test'], X_tr.loc[segment, 'p_test'] = stats.f_oneway(x[:30000],x[30000:60000],x[60000:90000],x[90000:120000],x[120000:])\n    X_tr.loc[segment, 'av_change_abs'] = np.mean(np.diff(x))\n    X_tr.loc[segment, 'av_change_rate'] = np.mean(np.nonzero((np.diff(x) / x[:-1]))[0])\n    X_tr.loc[segment, 'abs_max'] = np.abs(x).max()\n    \n    for windows in [10,100]:\n        x_roll_std = x_raw.rolling(windows).std().dropna().values\n        x_roll_mean = x_raw.rolling(windows).mean().dropna().values\n        \n        X_tr.loc[segment, 'ave_roll_std_' + str(windows)] = x_roll_std.mean()\n        X_tr.loc[segment, 'std_roll_std_' + str(windows)] = x_roll_std.std()\n        X_tr.loc[segment, 'max_roll_std_' + str(windows)] = x_roll_std.max()\n        X_tr.loc[segment, 'min_roll_std_' + str(windows)] = x_roll_std.min()\n        X_tr.loc[segment, 'q01_roll_std_' + str(windows)] = np.quantile(x_roll_std,0.01)\n        X_tr.loc[segment, 'q05_roll_std_' + str(windows)] = np.quantile(x_roll_std,0.05)\n        X_tr.loc[segment, 'q95_roll_std_' + str(windows)] = np.quantile(x_roll_std,0.95)\n        X_tr.loc[segment, 'q99_roll_std_' + str(windows)] = np.quantile(x_roll_std,0.99)\n        X_tr.loc[segment, 'av_change_abs_roll_std_' + str(windows)] = np.mean(np.diff(x_roll_std))\n        X_tr.loc[segment, 'av_change_rate_roll_std_' + str(windows)] = np.mean(np.nonzero((np.diff(x_roll_std) / x_roll_std[:-1]))[0])\n        X_tr.loc[segment, 'abs_max_roll_std_' + str(windows)] = np.abs(x_roll_std).max()\n        \n        X_tr.loc[segment, 'ave_roll_mean_' + str(windows)] = x_roll_mean.mean()\n        X_tr.loc[segment, 'std_roll_mean_' + str(windows)] = x_roll_mean.std()\n        X_tr.loc[segment, 'max_roll_mean_' + str(windows)] = x_roll_mean.max()\n        X_tr.loc[segment, 'min_roll_mean_' + str(windows)] = x_roll_mean.min()\n        X_tr.loc[segment, 'q01_roll_mean_' + str(windows)] = np.quantile(x_roll_mean,0.01)\n        X_tr.loc[segment, 'q05_roll_mean_' + str(windows)] = np.quantile(x_roll_mean,0.05)\n        X_tr.loc[segment, 'q95_roll_mean_' + str(windows)] = np.quantile(x_roll_mean,0.95)\n        X_tr.loc[segment, 'q99_roll_mean_' + str(windows)] = np.quantile(x_roll_mean,0.99)\n        X_tr.loc[segment, 'av_change_abs_roll_mean_' + str(windows)] = np.mean(np.diff(x_roll_mean))\n        X_tr.loc[segment, 'av_change_rate_roll_mean_' + str(windows)] = np.mean(np.nonzero((np.diff(x_roll_mean) / x_roll_mean[:-1]))[0])\n        X_tr.loc[segment, 'abs_max_roll_mean_' + str(windows)] = np.abs(x_roll_mean).max()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"76dc72495d98f72bb58723541ba89d11ed68aab4"},"cell_type":"code","source":"X_tr.shape , y_tr.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8ab29e02ddcafe72a75d7e60744d574fb6e95433"},"cell_type":"code","source":"submission = pd.read_csv('../input/sample_submission.csv')\nsubmission.head(2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3a45d2ad397722e5b2be414a936f14498ad4c9ec"},"cell_type":"code","source":"os.listdir('../input/test/')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"05fe93f33bf5195daec4ee575dd506daeb5a46b5"},"cell_type":"code","source":"seg_37669c = pd.read_csv('../input/test/seg_37669c.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b2351855a5909d6499aa5e6f57ac5799a714c614"},"cell_type":"code","source":"print(seg_37669c.head(2))\nseg_37669c.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bb73424bf15d94fd3072a07d09dd64c46d242715"},"cell_type":"code","source":"submission = pd.read_csv('../input/sample_submission.csv', index_col='seg_id')\nX_test = pd.DataFrame(columns=X_tr.columns, dtype=np.float64, index=submission.index)\n\n\nfor i, seg_id in enumerate(tqdm_notebook(X_test.index)):\n    seg = pd.read_csv('../input/test/' + seg_id + '.csv')\n    \n    x_raw = seg['acoustic_data']\n    x_roll = x_raw.rolling(windows).std().dropna().values\n    x = x_raw.values\n    \n    X_test.loc[seg_id, 'ave'] = x.mean()\n    X_test.loc[seg_id, 'std'] = x.std()\n    X_test.loc[seg_id, 'max'] = x.max()\n    X_test.loc[seg_id, 'min'] = x.min()\n    X_test.loc[seg_id, 'q01'] = np.quantile(x,0.01)\n    X_test.loc[seg_id, 'q05'] = np.quantile(x,0.05)\n    X_test.loc[seg_id, 'q95'] = np.quantile(x,0.95)\n    X_test.loc[seg_id, 'q99'] = np.quantile(x,0.99)\n    X_test.loc[seg_id, 'abs_median'] = np.median(np.abs(x))\n    X_test.loc[seg_id, 'abs_q95'] = np.quantile(np.abs(x),0.95)\n    X_test.loc[seg_id, 'abs_q99'] = np.quantile(np.abs(x),0.99)\n    X_test.loc[seg_id, 'F_test'], X_tr.loc[segment, 'p_test'] = stats.f_oneway(x[:30000],x[30000:60000],x[60000:90000],x[90000:120000],x[120000:])\n    X_test.loc[seg_id, 'av_change_abs'] = np.mean(np.diff(x))\n    X_test.loc[seg_id, 'av_change_rate'] = np.mean(np.nonzero((np.diff(x) / x[:-1]))[0])\n    X_test.loc[seg_id, 'abs_max'] = np.abs(x).max()\n    \n    for windows in [10,100]:\n        x_roll_std = x_raw.rolling(windows).std().dropna().values\n        x_roll_mean = x_raw.rolling(windows).mean().dropna().values\n        \n        X_test.loc[seg_id, 'ave_roll_std_' + str(windows)] = x_roll_std.mean()\n        X_test.loc[seg_id, 'std_roll_std_' + str(windows)] = x_roll_std.std()\n        X_test.loc[seg_id, 'max_roll_std_' + str(windows)] = x_roll_std.max()\n        X_test.loc[seg_id, 'min_roll_std_' + str(windows)] = x_roll_std.min()\n        X_test.loc[seg_id, 'q01_roll_std_' + str(windows)] = np.quantile(x_roll_std,0.01)\n        X_test.loc[seg_id, 'q05_roll_std_' + str(windows)] = np.quantile(x_roll_std,0.05)\n        X_test.loc[seg_id, 'q95_roll_std_' + str(windows)] = np.quantile(x_roll_std,0.95)\n        X_test.loc[seg_id, 'q99_roll_std_' + str(windows)] = np.quantile(x_roll_std,0.99)\n        X_test.loc[seg_id, 'av_change_abs_roll_std_' + str(windows)] = np.mean(np.diff(x_roll_std))\n        X_test.loc[seg_id, 'av_change_rate_roll_std_' + str(windows)] = np.mean(np.nonzero((np.diff(x_roll_std) / x_roll_std[:-1]))[0])\n        X_test.loc[seg_id, 'abs_max_roll_std_' + str(windows)] = np.abs(x_roll_std).max()\n        \n        X_test.loc[seg_id, 'ave_roll_mean_' + str(windows)] = x_roll_mean.mean()\n        X_test.loc[seg_id, 'std_roll_mean_' + str(windows)] = x_roll_mean.std()\n        X_test.loc[seg_id, 'max_roll_mean_' + str(windows)] = x_roll_mean.max()\n        X_test.loc[seg_id, 'min_roll_mean_' + str(windows)] = x_roll_mean.min()\n        X_test.loc[seg_id, 'q01_roll_mean_' + str(windows)] = np.quantile(x_roll_mean,0.01)\n        X_test.loc[seg_id, 'q05_roll_mean_' + str(windows)] = np.quantile(x_roll_mean,0.05)\n        X_test.loc[seg_id, 'q95_roll_mean_' + str(windows)] = np.quantile(x_roll_mean,0.95)\n        X_test.loc[seg_id, 'q99_roll_mean_' + str(windows)] = np.quantile(x_roll_mean,0.99)\n        X_test.loc[seg_id, 'av_change_abs_roll_mean_' + str(windows)] = np.mean(np.diff(x_roll_mean))\n        X_test.loc[seg_id, 'av_change_rate_roll_mean_' + str(windows)] = np.mean(np.nonzero((np.diff(x_roll_mean) / x_roll_mean[:-1]))[0])\n        X_test.loc[seg_id, 'abs_max_roll_mean_' + str(windows)] = np.abs(x_roll_mean).max()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2dba55c8423fef3f013a3bb00ebd9faf44ceb07e"},"cell_type":"code","source":"X_test.fillna(value=0,axis=1,inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e4e5933a082af4fdb660b1de827fbe501d417895"},"cell_type":"code","source":"from sklearn.ensemble import RandomForestRegressor\nfrom sklearn.model_selection import GridSearchCV\n# Create the parameter grid based on the results of random search \nparam_grid = {\n    'bootstrap': [True],\n    'max_depth': [90, 100, 110],\n    'max_features': [2, 3 , 'auto'],\n    'min_samples_leaf': [3, 4, 5],\n    'min_samples_split': [8, 10, 12],\n    'n_estimators': [100, 200, 300]\n}\n# Create a based model\nrf = RandomForestRegressor()\n# Instantiate the grid search model\ngrid_search = GridSearchCV(estimator = rf, param_grid = param_grid, \n                          cv = 3, n_jobs = -1, verbose = 2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"84ec2a2200c6c15a1311d92d06b6e87b5af67219"},"cell_type":"code","source":"# Fit the grid search to the data\ngrid_search.fit(X_tr, y_tr)\ngrid_search.best_params_","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b75f83221133367a29afa73199983381f66829bc"},"cell_type":"markdown","source":"{'bootstrap': True,\n 'max_depth': 100,\n 'max_features': 2,\n 'min_samples_leaf': 5,\n 'min_samples_split': 8,\n 'n_estimators': 300}"},{"metadata":{"trusted":true,"_uuid":"7f9307fd7f41206caa798e1dec5e938d06d10084"},"cell_type":"code","source":"rf_tuned = RandomForestRegressor(**grid_search.best_params_,n_jobs = -1)\nrf_tuned.fit(X_tr, y_tr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7ee88efe172173cd9a962a5a25251c833ae8f24e"},"cell_type":"code","source":"feat_labels = X_tr.columns\nimportances = rf_tuned.feature_importances_\n\nindices = np.argsort(importances)[::-1]\nfor f in range(X_tr.shape[1]):\n    print(\"%2d) %-*s %f\" % (f + 1, 30, \n                            feat_labels[indices[f]], \n                            importances[indices[f]]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"93c990c0e33f8f4152fc9b454a6767f8140ae45a"},"cell_type":"code","source":"def selectKImportance(model, X, k=5):\n     \"\"\"\n     X = features \n     K = No of features you want to select\n     \"\"\"\n     return X.iloc[:,model.feature_importances_.argsort()[::-1][:k]]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"1cf2e8fe4bd2c5765a0308e56de64ccb46a202b8"},"cell_type":"code","source":"type(X_tr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7d1f43e41d1b0d7a261a7d42037f287129de22bf"},"cell_type":"code","source":"# Selecting top 35 features \nnew_X_tr = selectKImportance(rf_tuned,X_tr,35)\nnew_X_tr.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2b88eba7b1c5aeb5db4f93019c7efa12e34095ab"},"cell_type":"code","source":"cols = new_X_tr.columns\nnew_X_test = X_test[cols]\nnew_X_test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"38cd4a6da1da9a3e7115bd7eebc2391511abba8a"},"cell_type":"code","source":"rf_tuned.fit(new_X_tr, y_tr)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b07323ea8ef530836a34543450380fa0bafc980e"},"cell_type":"code","source":"prediction = rf_tuned.predict(new_X_test)\nsubmission['time_to_failure'] = prediction\nsubmission.to_csv('submission_all_top35Features.csv')","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}