{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.11","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":102335,"databundleVersionId":12518947,"sourceType":"competition"},{"sourceId":12134081,"sourceType":"datasetVersion","datasetId":7641433},{"sourceId":12162807,"sourceType":"datasetVersion","datasetId":7660217},{"sourceId":245300130,"sourceType":"kernelVersion"}],"dockerImageVersionId":31040,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"from cmi_utility_scripts import *\nimport kaggle_evaluation.cmi_inference_server","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"stringify_pthlib_pth = lambda pth: str(pth.resolve())","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\nmodels_dir = Path(\"/kaggle/input/second-dset\")\nrf_pth,encoder_pth = [stringify_pthlib_pth(pth) for pth in models_dir.iterdir()]\n\ntarget_col = \"gesture\"\ncommon_extra_cols = [\"row_id\",\"sequence_counter\"]\nrotation_cols = [ 'rot_w', 'rot_x',\n       'rot_y', 'rot_z']\naccelerometer_cols = ['acc_x', 'acc_y', 'acc_z']\n\nthermophile_columns = [f\"thm_{i}\" for i in range(1, 6)]\ntof_cols = [f\"tof_{i}_v{j}\" for i in range(1, 6) for j in range(64)]\ngrouping_col = \"sequence_id\"\nsubject_col = \"subject\"\nheat_col = \"total_heat\"\n# doing the fe\ncats_to_be = [\"sex\",\"handedness\",\"adult_child\"]","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"rf_model = reloading_pickles(rf_pth)","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def predict(sequence: pl.DataFrame, demographics: pl.DataFrame) -> str:\n    \n    # Replace this function with your inference code.\n    # You can return either a Pandas or Polars dataframe, though Polars is recommended.\n    # Each prediction (except the very first) must be returned within 30 minutes of the batch features being provided.\n    test_df = convert_df(sequence)\n    test_demog_df = convert_df(demographics)\n    encoder_pth='/kaggle/input/second-dset/lblencoder.pkl'\n    rf_pth = '/kaggle/input/second-dset/second_rf.pkl'\n    lablencoder = reloading_pickles(encoder_pth)\n    rf_model = reloading_pickles(rf_pth)\n    all_cols = list(rf_model.feature_names_in_)\n    drop_cols(test_df,[*tof_cols,*common_extra_cols])\n   \n    test_demog_df = vanilla_categorical_procs(test_demog_df,cats_to_be)\n    test_df = vanilla_quant_procs(test_df)\n    all_numeric_cols = [*accelerometer_cols,*rotation_cols]\n    penultimate_df = perform_grouped_analysis(test_df,grouping_col,thermophile_columns,all_numeric_cols,heat_col)\n    penultimate_df = penultimate_df.reset_index()\n    drop_cols(test_df,[*accelerometer_cols,*rotation_cols,*thermophile_columns,heat_col],True)\n    cleaned_df = test_df\n    merged_numeric_df = pd.merge(penultimate_df,cleaned_df,on=grouping_col)\n    merged_numeric_df.drop_duplicates(inplace=True)\n    complete_df = merged_numeric_df.merge(test_demog_df,on=subject_col)\n    seq_ids = complete_df[grouping_col].values.tolist()\n    drop_cols(complete_df,[subject_col,grouping_col],True)\n    complete_df = complete_df[all_cols]\n    complete_df = complete_df.fillna(0)\n    results = rf_model.predict(complete_df)\n    final_labels = lablencoder.inverse_transform(results)[-1]\n    \n    return final_labels","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-20T11:56:54.141128Z","iopub.execute_input":"2025-06-20T11:56:54.141394Z","iopub.status.idle":"2025-06-20T11:56:54.208751Z","shell.execute_reply.started":"2025-06-20T11:56:54.141373Z","shell.execute_reply":"2025-06-20T11:56:54.207693Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"inference_server = kaggle_evaluation.cmi_inference_server.CMIInferenceServer(predict)\n\nif os.getenv('KAGGLE_IS_COMPETITION_RERUN'):\n    inference_server.serve()\nelse:\n    inference_server.run_local_gateway(\n        data_paths=(\n            '/kaggle/input/cmi-detect-behavior-with-sensor-data/test.csv',\n            '/kaggle/input/cmi-detect-behavior-with-sensor-data/test_demographics.csv',\n        )\n    )","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}