{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":61461,"databundleVersionId":6756046,"sourceType":"competition"}],"dockerImageVersionId":30558,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# IPM3211 Project 2: Prediction Model for Building Comfort and Performance","metadata":{}},{"cell_type":"code","source":"#Credits: Make it rain: Rainwater Harvesting Feasibility\n\n#importing all the external libraries we need - zy\nimport os\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\n# Additional modules for maps\nimport folium\nfrom branca.element import Figure\nfrom folium.plugins import HeatMap, MarkerCluster\nimport plotly.express as px\nfrom math import cos, asin, sqrt, pi\npd.set_option('display.max_columns', None)\n\nmembers = pd.DataFrame({\n    \"Member's Name\" : [\"Chen Yong Zhi\",\"Chin Jovan\",\"Lee Ze Yuan\",\"Millenn Tan Jun Ming\",\"Solvang Stoltz Oliver Alexander\"],\n    \"Matriculation Number\" : [\"A0252714J\",\"A0251943A\",\"A0253208L\",\"A0233858U\",\"A0283597J\"]},\n    index = [\"1\",\"2\",\"3\",\"4\",\"5\"])\n\n#showing the table\nmembers","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:29:57.493493Z","iopub.execute_input":"2023-11-23T11:29:57.494206Z","iopub.status.idle":"2023-11-23T11:30:01.531066Z","shell.execute_reply.started":"2023-11-23T11:29:57.494167Z","shell.execute_reply":"2023-11-23T11:30:01.529561Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":" ## Table of Content\n \n * [1. Introduction](#1.Introduction)\n * [2.1. Read data](#Read_data)\n * [Interpolate health data](#Interpolate_health_data)\n * [Interpolate weather data](#Interpolate_weather_data)\n * [Remove rows and columns](#Remove_rows_and_columns)\n * [Split data](#Split_data)\n * [Data preparation](#Data_preparation)\n * [Example prediction](#Example_prediction)\n     * [Prediction `q_noise_nearby`](#Predict_q_noise_nearby)\n     * [Prediction `q_noise_kind`](#Predict_q_noise_kind)\n     * [Prediction `q_earphones`](#Predict_q_earphones)\n     * [Prediction `q_thermal_preference`](#Predict_q_thermal_preference)\n * [Predict any column](#Predict_any_column)\n * [Compute overall score](#Compute_overall_score)\n * [Create submission file](#Create_submission_file)","metadata":{}},{"cell_type":"markdown","source":"<a id=\"1. Introduction\"></a>\n# **1. Introduction**\n\nTo increase competitiveness against other real estate website, PropertyGuru has engaged us in a bid to boost their utilisation of their website by increasing the standard of flats recommended to their clients.\nWe have created an app that real estate agents behind PropertyGuru will be able to utilise, to find and recommend flats to customers / potential flatowners, mainly based on the usage of data provided to predict noise levels around a certain area, as well as the prediction of thermal comfort of the area to provide customers with a rough gauge of the environment of flats in particular areas of interest.\n\n\n![image.png](attachment:7823f981-5550-4ba0-a2d1-bc5c72e1cec0.png)","metadata":{},"attachments":{"7823f981-5550-4ba0-a2d1-bc5c72e1cec0.png":{"image/png":"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aKtJ3+cMN3tb3qyT/Mz2m+eee27JPt/vKs+96BO2BrVffHs/+UjX7mvD5B1phznW8XsYLY1PnNzeFSzHp13Hria5o45d5WqFxkYDU4FlVDT/wIeLlRUrQj4PIIlnjhnwAsLieU4b9+IYIBPXGSDyeTzvd2yX2Y4XQON+tnzaSQis+QA6uJoq2FYSWMb2lW0Akj4gMH+XMufbz8KX4/Q7txWkb2rG1pS5POesp7aRFGzNyWIZe7K7p5262u/II48se8OH7CWDIf477rjjypaVea5ktGnOK+tftuS377s47XjR/8RrpxtCpKGi1PF7KDWNTaTc3hUsx6ZZx68iuaOOX+1qjcZFA4PAEnCw1O2www5lz237a//qV78q+2Dr3/butrd1Dh/72MfK3uKeH3HEET1rGNCyx7f7K6+8cnP77beXZH/5y1/K/tfAbdttt22e+tSnFisaa9paa63VrL766s2uu+5a9iYHXPbv5l7ee++9m+WXX7553/ve19x2223NBhts0DzucY8r97M8733ve5sVV1yxlHnSSSf1HgFA+bLYLbvsss1KK61UXMMRQT3te04e+49vt912Pcvj73//+wJZ6kJ/u+++e/OHP/yhefTRR5sDDjig1PH1r399873vfa8A6WWXXRbZFpe6D6lLd/HFF/e2kfzud79byqBv5cr7xhtv7KVrn9x///3NK1/5ylLnTTbZpICs8ulcWv/OOuus3kfcwTtrpTbzTH2USee//vWvS/Y333xzs9NOOxVdiHP22WcXV/Qdd9xRdL3ccssVHfzgBz9ozj///JLPE57whKJz7ShkkP7Upz7VSCOv8847rzwHjPaJd4+O8v7tJcI//7PPun6nX+gv/uV96cGvPdXtuS6vY445ppc8Q2zv5jRP5FnD5Gggt3cFy8lp95Grae6oIyd8FXhiNDAILO++++7myU9+cgPCBNY7rt0AJYABhBwFsAiyfv7zn5frE088sbn00ksL9HzoQx9qLrnkknIfqIAK8AZE9ttvv+Ytb3lL8+c//7nhogV8+++/f4n7jW98o8y1AyCsabvttlsBmd/97ncl/pZbbllgCkz89Kc/LYB51113lbRAhKWN3EDk0EMP7c2TvO+++wqQfO5zn+vJtNlmmzU//OEPGwB72GGHNTfccEN59rWvfa15/OMf33z6058u1+6rj2B/cTD3yU9+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"}}},{"cell_type":"markdown","source":"# **2. Data Cleaning**\n\n\nBefore inputting the data into the machine learning model, we first have to clean the data to obtain a better model in terms of accuracy. This process of data cleaning is already done for us by Mario Frei.","metadata":{}},{"cell_type":"markdown","source":"<a id=\"2.1. Read_data\"></a>\n# 2.1. Read data\n\nRead all csv file into dataframes. (This might take a few moments)\n","metadata":{}},{"cell_type":"code","source":"df_train = pd.read_csv('/kaggle/input/IPM3211-City-Heat-Noise/5_xesh_split_ipm_train.csv', index_col=[0], keep_default_na=False, na_values=[''], parse_dates=['time', 'ws_timestamp_location', 'ws_timestamp_start'], date_format='%Y-%m-%d %H:%M:%S.%f%z')\ndf_solution = pd.read_csv('/kaggle/input/IPM3211-City-Heat-Noise/5_xesh_split_ipm_test_public.csv', index_col=[0], keep_default_na=False, na_values=[''], parse_dates=['time', 'ws_timestamp_location', 'ws_timestamp_start'], date_format='%Y-%m-%d %H:%M:%S.%f%z')\ndf_rain = pd.read_csv('/kaggle/input/IPM3211-City-Heat-Noise/3_weather_rainfall_processed.csv', parse_dates=True, index_col=[0])\ndf_temperature = pd.read_csv('/kaggle/input/IPM3211-City-Heat-Noise/3_weather_air-temperature_processed.csv', parse_dates=True, index_col=[0])\ndf_humidity = pd.read_csv('/kaggle/input/IPM3211-City-Heat-Noise/3_weather_relative-humidity_processed.csv', parse_dates=True, index_col=[0])\ndf_wind_speed = pd.read_csv('/kaggle/input/IPM3211-City-Heat-Noise/3_weather_wind-speed_processed.csv', parse_dates=True, index_col=[0])\ndf_wind_direction = pd.read_csv('/kaggle/input/IPM3211-City-Heat-Noise/3_weather_wind-direction_processed.csv', parse_dates=True, index_col=[0])\ndf_stations = pd.read_csv('/kaggle/input/IPM3211-City-Heat-Noise/3_weather_stations.csv')","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:30:01.533609Z","iopub.execute_input":"2023-11-23T11:30:01.534019Z","iopub.status.idle":"2023-11-23T11:31:34.543440Z","shell.execute_reply.started":"2023-11-23T11:30:01.533987Z","shell.execute_reply":"2023-11-23T11:31:34.541785Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train['source']='train'\ndf_solution['source']='solution'\ndf_all = pd.concat([df_train, df_solution])","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:31:34.545261Z","iopub.execute_input":"2023-11-23T11:31:34.545612Z","iopub.status.idle":"2023-11-23T11:31:34.869146Z","shell.execute_reply.started":"2023-11-23T11:31:34.545582Z","shell.execute_reply":"2023-11-23T11:31:34.867848Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"2.2. Interpolate_health_data\"></a>\n# 2.2. Interpolate health data\n\nHealth data, e.g., `ts_heart_reate`, and the watch survey responses, e.g., `q_thermal_preference`, do not have the timestamps. Hence, the health data needs to be interpolated at the timestamps of the watch survey responses.\n\nThe interpolated values are stored in columns with the prefix `ws_` which stands for 'watch survey', e.g., the interpolated values of `ts_heart_rate` are stored in `ws_heart_rate`.\n\n\n**Improvement suggestion 1 :** \n\nIt might be worth debating whether some of the health data, e.g., `ts_stand_time`, `ts_step_count`, and `ts_walking_distance` should be aggregated, e.g., summed up over time (cumsum) before being interpolated.\nAlternatively an hourly mean could also be an interesting apporach.\n\n**Improvement suggestion 2 :** \n\nCurrently, the interpolation is looking for the nearest value. However, other approaches could be used, e.g., linear interpolation.\n","metadata":{}},{"cell_type":"code","source":"# Inspect dataset with raw values\ndf_all[(df_all.id_participant=='xesh001') & ((df_all.ws_survey_count.notna()) | (df_all.ts_heart_rate))][['id_participant', 'ws_survey_count', 'ts_heart_rate']].head(10)","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:31:34.872524Z","iopub.execute_input":"2023-11-23T11:31:34.873278Z","iopub.status.idle":"2023-11-23T11:31:35.087580Z","shell.execute_reply.started":"2023-11-23T11:31:34.873243Z","shell.execute_reply":"2023-11-23T11:31:35.086447Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Note, in the cell above the column `ws_survey_count` used as a place holder for watch survey responses. `ws_survey_count` is present in all watch survey response rows. This is not necessarily true for other columns of watch survey responses. Hence, you can filter for watch survey responses with `df[df.ws_survey_response.notna()]`, which will show all rows with watch survey responses.","metadata":{}},{"cell_type":"code","source":"# Function to resample health data at the timestamps of watch survey responses.\ndef resample_health(df, col_name, col_name_new):\n    df[col_name_new] = df[col_name].interpolate(method='nearest').bfill().ffill().mask(df['ws_survey_count'].isna())\n    return df","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:31:35.088978Z","iopub.execute_input":"2023-11-23T11:31:35.089308Z","iopub.status.idle":"2023-11-23T11:31:35.095899Z","shell.execute_reply.started":"2023-11-23T11:31:35.089279Z","shell.execute_reply":"2023-11-23T11:31:35.094697Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Resample health data\ndf_all = df_all.groupby('id_participant').apply(resample_health, col_name='ts_heart_rate', col_name_new='ws_heart_rate').reset_index(level=[0], drop=True)\ndf_all = df_all.groupby('id_participant').apply(resample_health, col_name='ts_audio_exposure_environment', col_name_new='ws_audio_exposure_environment').reset_index(level=[0], drop=True)\ndf_all = df_all.groupby('id_participant').apply(resample_health, col_name='ts_oxygen_saturation', col_name_new='ws_oxygen_saturation').reset_index(level=[0], drop=True)\ndf_all = df_all.groupby('id_participant').apply(resample_health, col_name='ts_resting_heart_rate', col_name_new='ws_resting_heart_rate').reset_index(level=[0], drop=True)\ndf_all = df_all.groupby('id_participant').apply(resample_health, col_name='ts_stand_time', col_name_new='ws_stand_time').reset_index(level=[0], drop=True)\ndf_all = df_all.groupby('id_participant').apply(resample_health, col_name='ts_step_count', col_name_new='ws_step_count').reset_index(level=[0], drop=True)\ndf_all = df_all.groupby('id_participant').apply(resample_health, col_name='ts_walking_distance', col_name_new='ws_walking_distance').reset_index(level=[0], drop=True)","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:31:35.097381Z","iopub.execute_input":"2023-11-23T11:31:35.097781Z","iopub.status.idle":"2023-11-23T11:31:47.346237Z","shell.execute_reply.started":"2023-11-23T11:31:35.097741Z","shell.execute_reply":"2023-11-23T11:31:47.344827Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Inspect dataset with resampled health values\ndf_all[df_all.id_participant.notna() & (df_all.ws_survey_count.notna() | df_all.ts_heart_rate.notna())][['id_participant', 'ws_survey_count', 'ws_heart_rate', 'ts_heart_rate']].head(10)","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:31:47.347620Z","iopub.execute_input":"2023-11-23T11:31:47.347980Z","iopub.status.idle":"2023-11-23T11:31:47.576194Z","shell.execute_reply.started":"2023-11-23T11:31:47.347950Z","shell.execute_reply":"2023-11-23T11:31:47.574953Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"2.3. Interpolate_weather_data\"></a>\n# 2.3. Interpolate weather data\n\nThe weather data is distributed over several dataframes. Each measurement, e.g., rain or air temperature, is in a separate dataframe. The column names are the IDs of the weather stations.\nThere is one dataframe (`df_stations`), which contains meta information to the weather stations, e.g., coordinates and names. \n\nTo make the weather data usable, we need to find the nearest weather stations for each watch survey response in `df_all`. Then we can transfer the measurement values with the same timestamp to from the weather data dataframe, e.g., `df_rain`, to the dataframe with the Cozie data (`df_all`).\n\n**Improvement suggestion 1**\n\nIt might be worth debating whether the weather data from larger a time frame than the minute of the watch survey response should be considered. This could for example be achieved by hourly averaging the weather data.\n\n**Improvement suggestion 2**\n\nSome values of the new weather data columns, e.g., `ws_air_temperature`, are still NaN values. The reason is that either there is no nearby weather station available or the nearest weather station as no data at that particular point in time. There are several ways to improve the situation:\n - Find the second nearest weather station with data\n - Look further forward or back in time than one minute to find suitable weather data\n - Aggregate the weather data, e.g., hourly or daily mean values\n - Remove weather stations that have data with many missing values","metadata":{}},{"cell_type":"code","source":"# Function to get weather data for a given timestamp and location from the nearest weather station\ndef get_weather_data(df_weather_data, lat, lon, timestamp):    \n    # Get timestamp with no seconds or microseconds\n    timestamp = timestamp.replace(second=0, microsecond=0)\n    \n    # Get weather data for timestamp above\n    weather_data_row = df_weather_data[df_weather_data.index == timestamp]\n\n    # If no weather data is available for timestamp above, get weather data for next minute\n    if (weather_data_row.empty):\n        timestamp = timestamp + pd.Timedelta(minutes=1)\n        weather_data_row = df_weather_data[df_weather_data.index == timestamp]\n        # If there is still no weather data available, return NaN\n        if (weather_data_row.empty):\n            return np.NaN\n\n    # Get weather station ids from weather stations with with data\n    station_ids_with_data = weather_data_row.columns[weather_data_row.count() > 0].tolist()\n\n    # Get weather stations with data\n    df_stations2 = df_stations[df_stations.id.isin(station_ids_with_data)]\n\n    # Compute distance to each weather station\n    df_stations2['distance'] = df_stations2.apply(lambda x: distance(x['latitude'], x['longitude'], lat, lon), axis=1)\n\n    # Get nearest weather station\n    station_id_nearest = df_stations2[df_stations2.distance==df_stations2.distance.min()].id.values[0]\n\n    # Retrun NaN for cases where the nearest weather station is more than 10km away\n    if df_stations2.distance.min()>10:\n        return np.NaN\n\n    # Return weather data from nearest weather station\n    return weather_data_row[station_id_nearest].values[0]\n\n# Function to compute distnace on spherical earth\ndef distance(lat1, lon1, lat2, lon2):\n    r = 6371 # km\n    p = pi / 180\n\n    a = 0.5 - cos((lat2-lat1)*p)/2 + cos(lat1*p) * cos(lat2*p) * (1-cos((lon2-lon1)*p))/2\n    return 2 * r * asin(sqrt(a))","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:31:47.578013Z","iopub.execute_input":"2023-11-23T11:31:47.578413Z","iopub.status.idle":"2023-11-23T11:31:47.591483Z","shell.execute_reply.started":"2023-11-23T11:31:47.578381Z","shell.execute_reply":"2023-11-23T11:31:47.590146Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Apply above function to the dataset for all weather data\ndf_all['ws_rainfall'] = df_all[df_all.ws_survey_count.notna()].apply(lambda row: get_weather_data(df_rain, row['ws_latitude'], row['ws_longitude'], row.name), axis=1)\ndf_all['ws_air_temperature'] = df_all[df_all.ws_survey_count.notna()].apply(lambda row: get_weather_data(df_temperature, row['ws_latitude'], row['ws_longitude'], row.name), axis=1)\ndf_all['ws_relative_humidity'] = df_all[df_all.ws_survey_count.notna()].apply(lambda row: get_weather_data(df_humidity, row['ws_latitude'], row['ws_longitude'], row.name), axis=1)\ndf_all['ws_wind_speed'] = df_all[df_all.ws_survey_count.notna()].apply(lambda row: get_weather_data(df_wind_speed, row['ws_latitude'], row['ws_longitude'], row.name), axis=1)\ndf_all['ws_wind_direction'] = df_all[df_all.ws_survey_count.notna()].apply(lambda row: get_weather_data(df_wind_direction, row['ws_latitude'], row['ws_longitude'], row.name), axis=1)","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:31:47.593239Z","iopub.execute_input":"2023-11-23T11:31:47.593685Z","iopub.status.idle":"2023-11-23T11:32:40.221964Z","shell.execute_reply.started":"2023-11-23T11:31:47.593641Z","shell.execute_reply":"2023-11-23T11:32:40.220930Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Inspect dataframe that now includes weather data\n# Inspect dataset with resampled health values\ndf_all[df_all.id_participant.notna() & df_all.ws_survey_count.notna()][['id_participant', 'ws_survey_count', 'ws_air_temperature', 'ws_heart_rate']].head()","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:40.226171Z","iopub.execute_input":"2023-11-23T11:32:40.226539Z","iopub.status.idle":"2023-11-23T11:32:40.312872Z","shell.execute_reply.started":"2023-11-23T11:32:40.226510Z","shell.execute_reply":"2023-11-23T11:32:40.311546Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"2.4. Remove_rows_and_columns\"></a>\n# 2.4. Remove rows and columns that we are not going to use\nWe are now at a point where we have completed the (basic) feature engineering and start preparing the data for the machine learning. For that, we are going to remove some of the rows and columns that we no longer need as it reduces the amount of data that we need to handle. More importantly it makes the dataframes easier to read for humans.\n\n**Improvement suggestion 1 :** \n\nFeel free to add or remove more columns. Ask yourself for each column if you it reasonable to expect any positive contribution to the model performance from the column. Also, what column could you create and add to improve the model performance. One way to find this out is be making changes the data and see whether the model performance improves or declines.","metadata":{}},{"cell_type":"code","source":"# Remove all rows that are not a watch survey response\ndf_all = df_all[df_all.ws_survey_count.notna()]\n\n# Remove some timestamp columns\ndf_all = df_all.drop(columns=['ws_timestamp_location', 'ws_timestamp_start'])\n\n# Remove columns of the original health data those are no longer needed since we are going to use the interpolated values\ndf_all = df_all.drop(columns=['ts_heart_rate',\n                              'ts_audio_exposure_environment',\n                              'ts_oxygen_saturation',\n                              'ts_resting_heart_rate',\n                              'ts_stand_time', \n                              'ts_step_count',\n                              'ts_walking_distance'])\n\n# Inspect dataframe\ndf_all.head()","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:40.314659Z","iopub.execute_input":"2023-11-23T11:32:40.315081Z","iopub.status.idle":"2023-11-23T11:32:40.450265Z","shell.execute_reply.started":"2023-11-23T11:32:40.315050Z","shell.execute_reply":"2023-11-23T11:32:40.449028Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"3. Data Visualisation\"></a>\n# **3. Data Visualisation**\n\n(explain what the data looks like and insert the visualisations under)","metadata":{}},{"cell_type":"code","source":"#visualisation 1 - time-based temperature change per weather station\n\n#Credits: Mario Frei\n#for coding the data resampling and visualisations\n\n#removing data after 21 Jan 2023\ndf_rain = df_rain[df_rain.index<'2023-01-22']\ndf_temperature = df_temperature[df_temperature.index<'2023-01-22']\ndf_humidity = df_humidity[df_humidity.index<'2023-01-22']\ndf_wind_speed = df_wind_speed[df_wind_speed.index<'2023-01-22']\ndf_wind_direction = df_wind_direction[df_wind_direction.index<'2023-01-22']\n\n#removing S117 weather station data due to missing fills\ndf_temperature = df_temperature.drop(columns=['S117'])\n\n#resample weather data\ndf_temperature_average = df_temperature.resample('60min').mean()\ndf_rain_sum = df_rain.resample('60min').sum() # note: for rain the data is aggregated with a sum instead of the mean\ndf_humidity_average = df_humidity.resample('60min').mean()\ndf_wind_speed_average = df_wind_speed.resample('60min').mean()\ndf_wind_direction_average = df_wind_direction.resample('60min').mean()\n\n#ensure df_stations has data and the 'id' column matches station codes in df_temperature_average\nif not df_stations.empty and 'id' in df_stations.columns and 'name' in df_stations.columns:\n    cols_num = 1\n    rows_num = len(df_temperature_average.columns)\n    fig, axs = plt.subplots(rows_num, cols_num, figsize=(20, 3 * rows_num))\n    plt.subplots_adjust(hspace=0.5)\n\n    for i, col in enumerate(df_temperature_average.columns):\n        axs[i].plot(df_temperature_average.index, df_temperature_average[col])\n        # Match station code from df_temperature_average to 'id' column in df_stations and retrieve station name\n        station_name = df_stations[df_stations['id'] == col]['name'].iloc[0]\n        axs[i].set_title(f'Weather Station {col}: {station_name}')\n        axs[i].set_ylabel('Air Temperature [°C]')\n        axs[i].set_xlabel('Timestamp')\n\n    plt.tight_layout()\n    plt.show()\nelse:\n    print(\"Data for station names not available or doesn't match the station codes.\")","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:40.451853Z","iopub.execute_input":"2023-11-23T11:32:40.452187Z","iopub.status.idle":"2023-11-23T11:32:47.697241Z","shell.execute_reply.started":"2023-11-23T11:32:40.452160Z","shell.execute_reply":"2023-11-23T11:32:47.696307Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"This line graph shows all individual weather stations' temperatures across a period of 3 months, from mid October 2022 to Mid January 2023. The temperature was recorded every minute, however for data visualization purposes, this was condensed into a per hour sampling rate. The maximum temperature recorded across all weather stations fluctuates between 32 - 34 degrees, and the minimum temperature fluctuates between 24 - 26 degrees. ","metadata":{}},{"cell_type":"code","source":"#visualisation 2 - mean temperature for each weather station\n\nimport pandas as pd\nimport matplotlib.pyplot as plt\n\n#creating a new dataset where the weather station codes are melted \nmelted_temp = pd.melt(df_temperature, id_vars=None, var_name='id', value_name='temperature')\n\n#calculating the average temperature of each weather station in another dataset\nmelted_temp_mean = melted_temp.groupby('id', as_index=False)['temperature'].mean()\n\n#combining the corresponding weather stations and their codes with df_stations\nmerged_melted_temp_mean = pd.merge(melted_temp_mean, df_stations, on='id', how='inner')\n\n# Assuming you have a DataFrame 'merged_melted_temp_mean' with columns 'name' and 'temperature'\n\nPreci = merged_melted_temp_mean['temperature']\nx_ = merged_melted_temp_mean['name']\n\nplt.figure(figsize=(8, 6))\nplt.bar(x_, Preci, color=\"orange\", width=0.5)\nplt.title(\"Mean temperature of weather stations\", fontsize=15)\nplt.xlabel(\"Location\", fontsize=10)\nplt.ylabel(\"Mean Temperature \"\"(°C)\", fontsize=10)\nplt.xticks(rotation=90)  # Rotate the x-axis labels for better visibility\nplt.tight_layout()  # Ensure the plot fits within the figure size\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:47.698951Z","iopub.execute_input":"2023-11-23T11:32:47.699302Z","iopub.status.idle":"2023-11-23T11:32:48.462227Z","shell.execute_reply.started":"2023-11-23T11:32:47.699271Z","shell.execute_reply":"2023-11-23T11:32:48.461003Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The bar graph illustrates the average temperature across different weather locations in the sample, providing a broad overview of the mean temperatures in each area. However, it's crucial to acknowledge that this representation doesn't precisely reflect the thermal comfort in any specific location due to its reliance on average temperatures, potentially compromising accuracy.","metadata":{}},{"cell_type":"code","source":"#visualisation 3 - Frequency of each type of noise\n\nimport matplotlib.pyplot as plt\nimport pandas as pd\n\n#this cleaning will be based on the q_noise_kind column, a new dataset will be created to preserve the original one\n#Drop rows with missing values in the 'q_noise_kind' column\ncleaned_df_train = df_train.dropna(subset=['q_noise_kind']).copy()\n\n# Calculate the frequency of each unique text value in the 'q_noise_nearby' column\nvalue_counts = cleaned_df_train['q_noise_kind'].value_counts()\n\n# Creating a bar graph\nplt.figure(figsize=(8, 6))  # Adjust figure size if needed\nvalue_counts.plot(kind='bar')\n\n# Labeling the axes and giving the graph a title\nplt.xlabel('Types of Noise')\nplt.ylabel('Frequency')\nplt.title('Frequencies of Types of Noise')\n\n# Show the bar graph\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:48.463903Z","iopub.execute_input":"2023-11-23T11:32:48.464342Z","iopub.status.idle":"2023-11-23T11:32:48.826639Z","shell.execute_reply.started":"2023-11-23T11:32:48.464300Z","shell.execute_reply":"2023-11-23T11:32:48.825485Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"This graph showcases the distribution of various noise types recorded throughout the sampling period. It's clear that the predominant noise detected is “talking”, thus showing that respondents exhibit higher sensitivity toward conversation and traffic noises. The other identified noise sources include traffic, appliances, construction, weather, and miscellaneous sources. ","metadata":{}},{"cell_type":"code","source":"#visualisation 4 - Volume of noise nearby\n\nimport matplotlib.pyplot as plt\nimport pandas as pd\n\n#this cleaning will be based on the q_noise_kind column, a new dataset will be created to preserve the original one\n#Drop rows with missing values in the 'q_noise_kind' column\ncleaned_df_train = df_train.dropna(subset=['q_noise_nearby']).copy()\n\n# Calculate the frequency of each unique text value in the 'q_noise_nearby' column\nvalue_counts = cleaned_df_train['q_noise_nearby'].value_counts()\n\n# Creating a bar graph\nplt.figure(figsize=(8, 6))  # Adjust figure size if needed\nvalue_counts.plot(kind='bar')\n\n# Labeling the axes and giving the graph a title\nplt.xlabel('Noise Volume')\nplt.ylabel('Frequency')\nplt.title('Volume of Noise Nearby')\n\n# Show the bar graph\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:48.828701Z","iopub.execute_input":"2023-11-23T11:32:48.829453Z","iopub.status.idle":"2023-11-23T11:32:49.148909Z","shell.execute_reply.started":"2023-11-23T11:32:48.829411Z","shell.execute_reply":"2023-11-23T11:32:49.147693Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The bar graph here depicts the volume of noises in the whole data set. Most noises nearby are bearable given that there are a minority of “a lot” noise.","metadata":{}},{"cell_type":"code","source":"#visualisation 5 - heatmap for average temperature according to location of weather stations (change it into normal dot map)\n\nfig = px.density_mapbox(merged_melted_temp_mean,  # Your data DataFrame\n                        lat='latitude',            # Column with latitude values\n                        lon='longitude',           # Column with longitude values\n                        z='temperature',           # Column with data for color density\n                        radius=20,                # Radius of the density circles\n                        mapbox_style=\"open-street-map\",\n                        center={\"lat\": 1.3587264156314176, \"lon\": 103.81600792035914},  # Centered on Singapore\n                        range_color=[26.5, 27.75],      # Color range for data\n                        zoom=10,                   # Initial zoom level\n                        height=400)\n\nfig.update_layout(margin={\"r\": 10, \"t\": 10, \"l\": 10, \"b\": 10})  # Update margin for layout\nfig.update_layout(coloraxis_colorbar=dict(\n    title=\"Average Temperature\",    # Colorbar title\n    ticks=\"outside\",               # Display colorbar ticks outside\n    ticksuffix=\" \",                # Add a space after ticks\n    dtick=0.1                       # Specify the tick interval\n))\nfig.show()","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:37:00.145623Z","iopub.execute_input":"2023-11-23T11:37:00.146051Z","iopub.status.idle":"2023-11-23T11:37:00.235499Z","shell.execute_reply.started":"2023-11-23T11:37:00.146020Z","shell.execute_reply":"2023-11-23T11:37:00.234416Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"The heatmap illustrates temperature variations gathered from diverse weather stations. Intensity of color indicates higher temperatures, with denser colors indicating hotter areas. The graph reveals a general trend in which the southern regions consistently exhibit higher temperatures compared to other areas.","metadata":{}},{"cell_type":"code","source":"#visualisation 6 - Location of data points(indoor or outdoor)\n\nimport matplotlib.pyplot as plt\nimport pandas as pd\n\n#this cleaning will be based on the q_noise_kind column, a new dataset will be created to preserve the original one\n#Drop rows with missing values in the 'q_noise_kind' column\ncleaned_df_train_location = df_train.dropna(subset=['q_location']).copy()\n\n# Calculate the frequency of each unique text value in the 'q_noise_nearby' column\nvalue_counts = cleaned_df_train_location['q_location'].value_counts()\n\n# Creating a bar graph\nplt.figure(figsize=(8, 6))  # Adjust figure size if needed\nvalue_counts.plot(kind='bar')\n\n# Labeling the axes and giving the graph a title\nplt.xlabel('Location')\nplt.ylabel('Frequency')\nplt.title('Location of Data Points')\n\n# Show the bar graph\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:50.991789Z","iopub.execute_input":"2023-11-23T11:32:50.993026Z","iopub.status.idle":"2023-11-23T11:32:51.347328Z","shell.execute_reply.started":"2023-11-23T11:32:50.992985Z","shell.execute_reply":"2023-11-23T11:32:51.346205Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"4. Prediction\"></a>\n## **4. Prediction**","metadata":{}},{"cell_type":"markdown","source":"<a id=\"4.1. Split_data\"></a>\n## 4.1. Split data\nWe split the data into the training set and solution set according to the original data (before we combined `df_train` and `df_solution` to `df_all` in the section [Read data](#Read_data)).\nFurther, we are going to take some data from the training set `df_train` and create a test set (`df_test`) in order to score the quality of our model. The split into training and testing data is need because the submission to the public leader board is limited to two per day and we want to avoid overfitting of the model.\n\nThe current split is 28 watch survey responses for the training set and the rest of responses for the test set. Feel free to change this ratio.","metadata":{}},{"cell_type":"code","source":"# Separate training and solution data again\ndf_train = df_all[df_all.source == 'train'].copy()\ndf_solution = df_all[df_all.source == 'solution'].copy()\n\n# ws_survey_count might contain missing values and might reset. \n# To avoid any issue we are creating a similar column ws_survey_count_2 without missing and duplicate values\ndf_train.loc[(df_train.ws_survey_count.notna()), 'ws_survey_count_2'] = df_train.loc[(df_train.ws_survey_count.notna()),].groupby('id_participant').cumcount()\n\n# Add 1 to start at 1 instead of 0\ndf_train['ws_survey_count_2'] = df_train['ws_survey_count_2']+1 \n\n# Split data into training and testing sets\ndf_test = df_train[(df_train.ws_survey_count_2>28)]\ndf_train = df_train[df_train.ws_survey_count_2<=28]\n\n# Drop the helper columns ws_surve_count_2 and source again\ndf_train = df_train.drop(columns=['ws_survey_count_2', 'source'])\ndf_test = df_test.drop(columns=['ws_survey_count_2', 'source'])\ndf_solution = df_solution.drop(columns=['source'])","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.349134Z","iopub.execute_input":"2023-11-23T11:32:51.350096Z","iopub.status.idle":"2023-11-23T11:32:51.400100Z","shell.execute_reply.started":"2023-11-23T11:32:51.350059Z","shell.execute_reply":"2023-11-23T11:32:51.398943Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"4.2. Data_preparation\"></a>\n## 4.2. Data preparation","metadata":{}},{"cell_type":"markdown","source":"For the machine learning model below, all input and output values need to be numeric. At this point, the watch survey the response columns, e.g., `q_noise_nearby`, are of type string. Hence, we need convert the values in these columns into numbers.","metadata":{}},{"cell_type":"code","source":"# Inspect dataframe still containing strings\ndf_train.head()","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.401542Z","iopub.execute_input":"2023-11-23T11:32:51.401903Z","iopub.status.idle":"2023-11-23T11:32:51.475661Z","shell.execute_reply.started":"2023-11-23T11:32:51.401874Z","shell.execute_reply":"2023-11-23T11:32:51.474785Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Find columns with values that are not numeric\ncat_vars = list(df_train.select_dtypes(include=['object']).columns)\ncat_vars","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.476951Z","iopub.execute_input":"2023-11-23T11:32:51.477936Z","iopub.status.idle":"2023-11-23T11:32:51.487029Z","shell.execute_reply.started":"2023-11-23T11:32:51.477902Z","shell.execute_reply":"2023-11-23T11:32:51.485881Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# encoding categorical variables\ndict_cat = {}\n\nfor var in cat_vars:\n    print(var)\n    if var == 'id_participant': # no need to encode the participant ID\n        continue\n    # convert categorical variables into 'category' type\n    df_train[var] = df_train[var].astype('category')\n    df_test[var] = df_test[var].astype('category')\n    df_solution[var] = df_solution[var].astype('category')\n    \n    # dictionary to keep track of the variable mapping: {variable-name: {number1: string1, number2: string2, ...}\n    dict_cat[var] = dict(enumerate(df_train[var].cat.categories))\n\n    # encode variables, missing values are encoded as -1\n    df_train[var] = df_train[var].cat.codes\n    df_test[var] = df_test[var].cat.codes\n    df_solution[var] = df_solution[var].cat.codes\n\n#dict_cat","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.488310Z","iopub.execute_input":"2023-11-23T11:32:51.488664Z","iopub.status.idle":"2023-11-23T11:32:51.533283Z","shell.execute_reply.started":"2023-11-23T11:32:51.488636Z","shell.execute_reply":"2023-11-23T11:32:51.532119Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Inspect dataframe where all strings were converted into integers\ndf_train.head()","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.534932Z","iopub.execute_input":"2023-11-23T11:32:51.535385Z","iopub.status.idle":"2023-11-23T11:32:51.607827Z","shell.execute_reply.started":"2023-11-23T11:32:51.535346Z","shell.execute_reply":"2023-11-23T11:32:51.606615Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"Example_prediction\"></a>\n# Example prediction of `q_noise_nearby`\nBelow we are going to predict the column `q_noise_nearby` step by step.\nLater on, we are going to wrap all steps up in a function for more convenience.","metadata":{}},{"cell_type":"code","source":"# Original size of the train dataset\ndf_train.shape","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.609077Z","iopub.execute_input":"2023-11-23T11:32:51.609398Z","iopub.status.idle":"2023-11-23T11:32:51.616591Z","shell.execute_reply.started":"2023-11-23T11:32:51.609371Z","shell.execute_reply":"2023-11-23T11:32:51.615432Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Original size of the test dataset\ndf_test.shape","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.618302Z","iopub.execute_input":"2023-11-23T11:32:51.618690Z","iopub.status.idle":"2023-11-23T11:32:51.628588Z","shell.execute_reply.started":"2023-11-23T11:32:51.618661Z","shell.execute_reply":"2023-11-23T11:32:51.627267Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Train: remove rows where the predicting variable is missing\n# In this example this doesn't remove any rows, but this will \n# be necessary for the column 'q_noise_kind'.\ndf_train_noise_nearby = df_train[df_train['q_noise_nearby'] != -1]\nprint(df_train_noise_nearby.shape)","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.630088Z","iopub.execute_input":"2023-11-23T11:32:51.630481Z","iopub.status.idle":"2023-11-23T11:32:51.642163Z","shell.execute_reply.started":"2023-11-23T11:32:51.630452Z","shell.execute_reply":"2023-11-23T11:32:51.640605Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Test: remove rows where the predicting variable is missing\ndf_test_noise_nearby = df_test[df_test['q_noise_nearby'] != -1]\nprint(df_test_noise_nearby.shape)","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.643928Z","iopub.execute_input":"2023-11-23T11:32:51.644274Z","iopub.status.idle":"2023-11-23T11:32:51.652866Z","shell.execute_reply.started":"2023-11-23T11:32:51.644230Z","shell.execute_reply":"2023-11-23T11:32:51.651782Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Train: remove the id_participant column\ndf_train_noise_nearby = df_train_noise_nearby.drop(['id_participant'], axis=1)\ndf_train_noise_nearby.shape","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.655562Z","iopub.execute_input":"2023-11-23T11:32:51.655995Z","iopub.status.idle":"2023-11-23T11:32:51.668367Z","shell.execute_reply.started":"2023-11-23T11:32:51.655964Z","shell.execute_reply":"2023-11-23T11:32:51.667196Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Test: remove the id_participant column\ndf_test_noise_nearby = df_test_noise_nearby.drop(['id_participant'], axis=1)\ndf_test_noise_nearby.shape","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.675385Z","iopub.execute_input":"2023-11-23T11:32:51.675769Z","iopub.status.idle":"2023-11-23T11:32:51.685877Z","shell.execute_reply.started":"2023-11-23T11:32:51.675737Z","shell.execute_reply":"2023-11-23T11:32:51.684337Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Count classes in predicting variable\nnum_class = df_train_noise_nearby['q_noise_nearby'].unique()\nprint(num_class)\ndict_cat['q_noise_nearby']","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.687120Z","iopub.execute_input":"2023-11-23T11:32:51.687468Z","iopub.status.idle":"2023-11-23T11:32:51.701337Z","shell.execute_reply.started":"2023-11-23T11:32:51.687438Z","shell.execute_reply":"2023-11-23T11:32:51.700495Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# First cell to run in case csv file doesnt work\n\n# Break dataframe into variables and ground truth\ny_train = df_train_noise_nearby['q_noise_nearby']\nX_train = df_train_noise_nearby.drop(['q_noise_nearby', 'q_noise_kind', 'q_earphones', 'q_thermal_preference'], axis=1)\n\ny_test = df_test_noise_nearby['q_noise_nearby']\nX_test = df_test_noise_nearby.drop(['q_noise_nearby', 'q_noise_kind', 'q_earphones', 'q_thermal_preference'], axis=1)","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.703029Z","iopub.execute_input":"2023-11-23T11:32:51.703378Z","iopub.status.idle":"2023-11-23T11:32:51.713654Z","shell.execute_reply.started":"2023-11-23T11:32:51.703350Z","shell.execute_reply":"2023-11-23T11:32:51.712764Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#AI model modifications from our group: it further splits the data into 2\nfrom sklearn.model_selection import train_test_split\n\nX_train_final, X_valid, y_train_final, y_valid = train_test_split(X_train, y_train, test_size=0.2, random_state=42)","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.714904Z","iopub.execute_input":"2023-11-23T11:32:51.715939Z","iopub.status.idle":"2023-11-23T11:32:51.912050Z","shell.execute_reply.started":"2023-11-23T11:32:51.715908Z","shell.execute_reply":"2023-11-23T11:32:51.910660Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Initialize model\nfrom xgboost import XGBClassifier\nfrom sklearn.metrics import accuracy_score, f1_score\n\nclf = XGBClassifier(\n    num_class=num_class, \n    objective='multi:softmax', \n    n_estimators=1200,\n    early_stopping_rounds=5,\n    learning_rate=0.05, \n    eval_metric=\"mlogloss\"\n)\n\n# Train model\n\nclf.fit(\n    X_train_final, y_train_final, \n    eval_set=[(X_valid, y_valid)], \n    verbose=False\n)","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:51.913682Z","iopub.execute_input":"2023-11-23T11:32:51.914485Z","iopub.status.idle":"2023-11-23T11:32:53.590447Z","shell.execute_reply.started":"2023-11-23T11:32:51.914449Z","shell.execute_reply":"2023-11-23T11:32:53.589651Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Predict and evaluate\ny_pred = clf.predict(X_test)\nprint('Model accuracy score: {0:0.4f}'. format(accuracy_score(y_test, y_pred)))","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:53.591475Z","iopub.execute_input":"2023-11-23T11:32:53.592456Z","iopub.status.idle":"2023-11-23T11:32:53.611017Z","shell.execute_reply.started":"2023-11-23T11:32:53.592414Z","shell.execute_reply":"2023-11-23T11:32:53.609924Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Copy test data into new dataframe\ndf_comparison = df_test.copy()\n\n# Assign test prediction to dataframe\ndf_comparison['q_noise_nearby (original)'] = y_test\ndf_comparison['q_noise_nearby (predicted)'] = y_pred\n\n# Convert labels from integers back to strings\ndf_comparison['q_noise_nearby (original)'] = df_comparison['q_noise_nearby (original)'].replace(dict_cat['q_noise_nearby'])\ndf_comparison['q_noise_nearby (predicted)'] = df_comparison['q_noise_nearby (predicted)'].replace(dict_cat['q_noise_nearby'])\n\n# Show dataframe\ndf_comparison[['id_participant', 'q_noise_nearby (original)', 'q_noise_nearby (predicted)', 'ws_heart_rate']]","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:53.615543Z","iopub.execute_input":"2023-11-23T11:32:53.616035Z","iopub.status.idle":"2023-11-23T11:32:53.643741Z","shell.execute_reply.started":"2023-11-23T11:32:53.615999Z","shell.execute_reply":"2023-11-23T11:32:53.642275Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Show rows with wrong predictions\ndf_comparison[df_comparison['q_noise_nearby (original)'] != df_comparison['q_noise_nearby (predicted)']][['id_participant', 'q_noise_nearby (original)', 'q_noise_nearby (predicted)', 'ws_heart_rate']]","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:53.645658Z","iopub.execute_input":"2023-11-23T11:32:53.646382Z","iopub.status.idle":"2023-11-23T11:32:53.668674Z","shell.execute_reply.started":"2023-11-23T11:32:53.646339Z","shell.execute_reply":"2023-11-23T11:32:53.667549Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"This is a good moment to look at `df_comparison` and see whether you can recognise a pattern in the values that were predicted wrongly.\nThis might inspire ideas for new features or data pre-processing steps.","metadata":{}},{"cell_type":"markdown","source":"<a id=\"Predict_any_column\"></a>\n# Predict any column\nWe are going to wrap up above code into a function in order to make the prediction of the other columns a bit more convenient. The steps are mostly the same as above and might feel a bit repetitive.\n\n**Improvement suggestion 1**\n\nCurrently, one column is predicted at a time and the same model is used for all participants. In order, to improve the performance, a separate model could be trained for each participant.\n\n**Improvement suggestion 2**\n\nLook into other algorithms than XGBoost.\n\n**Improvement suggestion 3**\n\nSome of the responses depend on previous responses, e.g., if the answer to the question 'Noise distractions nearby?' is 'None', then the response to 'What kind of noise?' and 'Wearing earphones' has to be 'Not applicable'. \nThese structures of the watch survey is currently not checked nor enforced.\n","metadata":{}},{"cell_type":"code","source":"def predict_any_column(column_name, df_train, df_test, df_solution):\n    # Remove rows where the predicting variable is missing\n    df_train = df_train[df_train[column_name] != -1]\n    df_test = df_test[df_test[column_name] != -1]\n    \n    # Remove rows where the predicting variable is missing\n    df_train = df_train.drop(columns=['id_participant'])\n    df_test = df_test.drop(columns=['id_participant'])\n    df_solution = df_solution.drop(columns=['id_participant'])\n\n    # Count classes in predicting variable\n    num_class = df_train[column_name].unique()\n    \n    # Break dataframe into variables and ground truth\n    y_train = df_train[column_name]\n    X_train = df_train.drop(['q_noise_nearby', 'q_noise_kind', 'q_earphones', 'q_thermal_preference'], axis=1)\n\n    y_test = df_test[column_name]\n    X_test = df_test.drop(['q_noise_nearby', 'q_noise_kind', 'q_earphones', 'q_thermal_preference'], axis=1)\n    \n    X_solution = df_solution.drop(['q_noise_nearby', 'q_noise_kind', 'q_earphones', 'q_thermal_preference'], axis=1)\n    \n    \n    from sklearn.model_selection import train_test_split\n\n    X_train_final, X_valid, y_train_final, y_valid = train_test_split(X_train, y_train, test_size=0.2, random_state=42)\n\n\n        # Initialize model\n    clf = XGBClassifier(\n        num_class=num_class, \n        objective='multi:softmax', \n        n_estimators=1200,\n        early_stopping_rounds=5,\n        learning_rate=0.05, \n        eval_metric=\"mlogloss\"\n    )\n\n    # Train model\n\n    clf.fit(\n        X_train_final, y_train_final, \n        eval_set=[(X_valid, y_valid)], \n        verbose=False\n        )\n\n    # Predict and evaluate\n    y_pred = clf.predict(X_test)\n    score = accuracy_score(y_test, y_pred)\n    print('XGBoost model accuracy score: {0:0.4f}'. format(score))\n\n    # Predict solution\n    X_solution.shape\n    y_solution = clf.predict(X_solution)\n    \n    return y_solution, score","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:53.670056Z","iopub.execute_input":"2023-11-23T11:32:53.670472Z","iopub.status.idle":"2023-11-23T11:32:53.683615Z","shell.execute_reply.started":"2023-11-23T11:32:53.670445Z","shell.execute_reply":"2023-11-23T11:32:53.682398Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create an empty list to collect the scores\nscore = []\n\n# Create a copy of the solution dataframe for submission\ndf_submission = df_solution.copy()","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:53.684964Z","iopub.execute_input":"2023-11-23T11:32:53.685337Z","iopub.status.idle":"2023-11-23T11:32:53.702630Z","shell.execute_reply.started":"2023-11-23T11:32:53.685280Z","shell.execute_reply":"2023-11-23T11:32:53.701400Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"Predict_q_noise_nearby\"></a>\n## Prediction `q_noise_nearby`\n\nWe've already prediced the values for the column `q_noise_nearby`. We are going to repeat this step in order to collect the score so that we can compute the overall score for all four columns that need to be predicted.","metadata":{}},{"cell_type":"code","source":"df_solution['q_noise_nearby'], this_score = predict_any_column('q_noise_nearby', df_train, df_test, df_solution)\nscore.append(this_score)","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:53.704119Z","iopub.execute_input":"2023-11-23T11:32:53.704484Z","iopub.status.idle":"2023-11-23T11:32:55.196158Z","shell.execute_reply.started":"2023-11-23T11:32:53.704452Z","shell.execute_reply":"2023-11-23T11:32:55.195185Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"Predict_q_noise_kind\"></a>\n## Prediction `q_noise_kind`","metadata":{}},{"cell_type":"code","source":"df_submission['q_noise_kind'], this_score  = predict_any_column('q_noise_kind', df_train, df_test, df_solution)\nscore.append(this_score)","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:55.200147Z","iopub.execute_input":"2023-11-23T11:32:55.200868Z","iopub.status.idle":"2023-11-23T11:32:59.066870Z","shell.execute_reply.started":"2023-11-23T11:32:55.200832Z","shell.execute_reply":"2023-11-23T11:32:59.065819Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"Predict_q_earphones\"></a>\n## Prediction `q_earphones`","metadata":{}},{"cell_type":"code","source":"df_submission['q_earphones'],this_score = predict_any_column('q_earphones', df_train, df_test, df_solution)\nscore.append(this_score)","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:32:59.071775Z","iopub.execute_input":"2023-11-23T11:32:59.074364Z","iopub.status.idle":"2023-11-23T11:33:01.207007Z","shell.execute_reply.started":"2023-11-23T11:32:59.074324Z","shell.execute_reply":"2023-11-23T11:33:01.205811Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"Predict_q_thermal_preference\"></a>\n## Prediction `q_thermal_preference`","metadata":{}},{"cell_type":"code","source":"df_submission['q_thermal_preference'],this_score = predict_any_column('q_thermal_preference', df_train, df_test, df_solution)\nscore.append(this_score)","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:33:01.208995Z","iopub.execute_input":"2023-11-23T11:33:01.209880Z","iopub.status.idle":"2023-11-23T11:33:02.968936Z","shell.execute_reply.started":"2023-11-23T11:33:01.209837Z","shell.execute_reply":"2023-11-23T11:33:02.967985Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"Compute_overall_score\"></a>\n# Compute overall score","metadata":{}},{"cell_type":"code","source":"# The overall score is just the averge of the scores for each column\nscore_total = np.mean(score)\nprint('Overall accuracy score: {0:0.4f}'. format(score_total))","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:33:02.972978Z","iopub.execute_input":"2023-11-23T11:33:02.975534Z","iopub.status.idle":"2023-11-23T11:33:02.983815Z","shell.execute_reply.started":"2023-11-23T11:33:02.975496Z","shell.execute_reply":"2023-11-23T11:33:02.982908Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"Create_submission_file\"></a>\n# Create submission file\nWe are almost done. We now need to convert the integers in the watch survey response columns back to the original strings and create a file that can be submitted to the competition.","metadata":{}},{"cell_type":"code","source":"# Convert classes back form integers to strings\nfor key in dict_cat:\n    if key in df_solution.columns:\n        df_submission[key] = df_submission[key].replace(dict_cat[key])\n\n# Select only necessary columns for submission\ndf_submission = df_submission[['id_unique', 'q_noise_nearby', 'q_noise_kind', 'q_earphones', 'q_thermal_preference']].set_index('id_unique')\n\n# Write dataframe to csv file\ndf_submission.to_csv('submission.csv')\n\nprint('Congrats! The Notebook exectued successfully!')","metadata":{"execution":{"iopub.status.busy":"2023-11-23T11:33:02.985320Z","iopub.execute_input":"2023-11-23T11:33:02.985771Z","iopub.status.idle":"2023-11-23T11:33:03.015796Z","shell.execute_reply.started":"2023-11-23T11:33:02.985726Z","shell.execute_reply":"2023-11-23T11:33:03.014463Z"},"trusted":true},"execution_count":null,"outputs":[]}]}