{"cells":[{"cell_type":"markdown","metadata":{"_cell_guid":"9e0b1c94-764c-3a12-fb30-f1f53ba4baf1"},"source":"# Feature combinations\n\nWe have seen [station 32 has high (4.7%) error rate][1].\n\nLet's investigate that failure rate with station combinations.\n\n  [1]: https://www.kaggle.com/jeffd23/bosch-production-line-performance/what-s-wrong-with-station-32"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"e8180192-9ca9-4c99-daa7-6d745e9ae117"},"outputs":[],"source":"%matplotlib inline\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nsns.set_style('whitegrid')"},{"cell_type":"markdown","metadata":{"_cell_guid":"587a8ccd-9fe7-14f9-f7e6-3422aad61708"},"source":"# Read station and response data\n\n['S32', 'S33', 'S34'] have the most interesting pattern. \n\nWe read the full train set although only 5 columns."},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"00ad541e-ac50-59a4-a013-f34b7ec713ed"},"outputs":[],"source":"STATIONS = ['S32', 'S33', 'S34']\ntrain_date_part = pd.read_csv('../input/train_date.csv', nrows=10000)\ndate_cols = train_date_part.drop('Id', axis=1).count().reset_index().sort_values(by=0, ascending=False)\ndate_cols['station'] = date_cols['index'].apply(lambda s: s.split('_')[1])\ndate_cols = date_cols[date_cols['station'].isin(STATIONS)]\ndate_cols = date_cols.drop_duplicates('station', keep='first')['index'].tolist()\nprint(date_cols)\ntrain_date = pd.read_csv('../input/train_date.csv', usecols=['Id'] + date_cols)\nprint(train_date.columns)\ntrain_date.columns = ['Id'] + STATIONS\nfor station in STATIONS:\n    train_date[station] = 1 * (train_date[station] >= 0)\nresponse = pd.read_csv('../input/train_numeric.csv', usecols=['Id', 'Response'])\nprint(response.shape)\ntrain = response.merge(train_date, how='left', on='Id')\n# print(train.count())\ntrain.head(3)"},{"cell_type":"markdown","metadata":{"_cell_guid":"d338b8d9-9f70-d115-b1f6-ea75248c8a53"},"source":"#Aggregation\n\nRemove cases with less than 1000 records to show significant results."},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"793d3420-c29a-4810-3a09-f926d79d7961"},"outputs":[],"source":"train"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"9badda51-b401-d944-5948-374821e84fe7"},"outputs":[],"source":"train['cnt'] = 1\nfailure_rate = train.groupby(STATIONS).sum()[['Response', 'cnt']]\nfailure_rate['failure_rate'] = failure_rate['Response'] / failure_rate['cnt']\nfailure_rate = failure_rate[failure_rate['cnt'] > 1000]  # remove \nfailure_rate.head(20)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"44866b71-8de5-7913-976f-15e21ef3716b"},"outputs":[],"source":"failure_rate_pretty = failure_rate.reset_index()\nfailure_rate_pretty['group'] = ['-'.join([s if row[s] else '' for s in STATIONS]) \\\n                         for _, row in failure_rate_pretty.iterrows()]\nfig=plt.figure(figsize=(10, 4))\nsns.barplot(x='group', y=\"failure_rate\", data=failure_rate_pretty, color='r', alpha=0.8)\nplt.ylabel('failure rate')\nfor i, row in failure_rate_pretty.iterrows():\n    plt.text(i, row['failure_rate']+0.01, np.round(row['failure_rate'], 3),\n             verticalalignment='top', horizontalalignment='center')\nplt.title('Station combinations %s' % str(STATIONS))\nfig.savefig('failure_rate.png', dpi=300)\nplt.show()"}],"metadata":{"_change_revision":0,"_is_fork":false,"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.5.2"}},"nbformat":4,"nbformat_minor":0}