{
  "id": 416106,
  "title": "20th place solution",
  "url": "/competitions/tlvmc-parkinsons-freezing-gait-prediction/writeups/moro-20th-place-solution",
  "author_name": "",
  "post_date": "2023-06-11T07:38:50.477Z",
  "votes": 21,
  "comment_count": 3,
  "views": 0,
  "content": "<p>Thank you to the organizers for the fun competition and everyone who participated.<br>\nI share my solution.</p>\n<h1>Summary</h1>\n<ul>\n<li>dataset: tdcsofg + defog (not use notype/unlabeled)</li>\n<li>model: Conv1d NN (common model for tdcsfog and defog) </li>\n<li>6 models ensemble</li>\n</ul>\n<h1>1. baseline model</h1>\n<ul>\n<li>I use this notebook. <a href=\"https://www.kaggle.com/code/mayukh18/pytorch-fog-end-to-end-baseline-lb-0-254\" target=\"_blank\">PyTorch FOG End-to-End Baseline [LB 0.254] </a></li>\n<li>Thank you for <a href=\"https://www.kaggle.com/mayukh18\" target=\"_blank\">@mayukh18</a> </li>\n</ul>\n<h1>2. Validation Strategy</h1>\n<ul>\n<li>GroupKFold : 5-fold (groups=Subject)</li>\n<li>Since it was imbalanced data, I adjusted the seed so that the number of cases and the ratio would be the same as much as possible</li>\n</ul>\n<h1>3. Preprocess data</h1>\n<ul>\n<li>Align the units of acceleration (divided by 9.8066 for tdcsfog). </li>\n<li>features:<ul>\n<li>raw data: AccV, AccML, AccAP</li>\n<li>AccMG: np.sqrt(AccV^2 + AccML^2 + AccAP^2)</li>\n<li>Time_freq: df[\"Time\"] / df[\"Time\"].max()</li>\n<li>tdcs flag</li>\n<li>Rolling Window Features</li></ul></li>\n</ul>\n<pre><code>\nfor col in [, , , ]:\n    for w in [10, 50, 100, 1000]:\n        df[f] = df[col]\n        df[f] = df[col] - \\\n                                    df[col]\n        df[f] = df[col] - df[col]\n</code></pre>\n<h1>4. Model</h1>\n<ul>\n<li>I define 2 models.<ul>\n<li>model A: <ul>\n<li>input's feature: 54 features (all feature)</li>\n<li>window_size=32: past=24, future=8, wx=8</li>\n<li>Input - (Conv1d:ks=3/5/10 - GAP) x 3 - MLP - Outputs</li></ul></li>\n<li>model B:<ul>\n<li>input's feature: 6 features (3raw + MG + Time_freq + tdcs)</li>\n<li>window_size=256: past=192, future=64, wx=1</li>\n<li>Input - Conv1d:ks=90 - GAP - MLP - Outputs</li></ul></li></ul></li>\n<li>training parameter:<ul>\n<li>loss: BCEWithLogitsLoss / BCE+CELoss(4label)</li>\n<li>optimizer: Adam(2e-5)</li>\n<li>epoch: 10</li></ul></li>\n</ul>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F164129%2F1d909bdab5119592b4ed78f061040fb6%2Fmodel.png?generation=1686321028285326&amp;alt=media\" alt=\"model.jpg\"></p>\n<h1>5. Postprocess</h1>\n<ul>\n<li>moving average of predicted values: window=500</li>\n<li>label 1 is continuous so I could increase score just a little. (+0.004)</li>\n</ul>\n<h1>6. Ensemble</h1>\n<ul>\n<li>I trained 6 models.</li>\n<li>The ensemble method is an equally weighted average.</li>\n</ul>\n<table>\n<thead>\n<tr>\n<th>id</th>\n<th>inputs</th>\n<th>win_size</th>\n<th>Acc-units</th>\n<th>model</th>\n<th>local-cv</th>\n<th>public</th>\n<th>private</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>v10</td>\n<td>54feats</td>\n<td>32(wx=8)</td>\n<td>None</td>\n<td>modelA</td>\n<td>0.290</td>\n<td>0.392</td>\n<td>0.316</td>\n</tr>\n<tr>\n<td>v13</td>\n<td>54feats</td>\n<td>32(wx=8)</td>\n<td>None</td>\n<td>modelA (custom)</td>\n<td>0.300</td>\n<td>0.376</td>\n<td>0.305</td>\n</tr>\n<tr>\n<td>v51b</td>\n<td>54feats + 2feats</td>\n<td>48(wx=8)</td>\n<td>div by 9.8</td>\n<td>modelA</td>\n<td>0.302</td>\n<td>0.386</td>\n<td>0.321</td>\n</tr>\n<tr>\n<td>v60</td>\n<td>54feats</td>\n<td>32(wx=8)</td>\n<td>div by 9.8</td>\n<td>modelA (+CELoss)</td>\n<td>0.301</td>\n<td>0.388</td>\n<td>0.306</td>\n</tr>\n<tr>\n<td>v59</td>\n<td>54feats</td>\n<td>32(wx=8)</td>\n<td>None</td>\n<td>modelA (other cv)</td>\n<td>0.324</td>\n<td>0.390</td>\n<td>0.312</td>\n</tr>\n<tr>\n<td>v58</td>\n<td>3raw+3feats</td>\n<td>256(wx=1)</td>\n<td>div by 9.8</td>\n<td>modelB</td>\n<td>0.306</td>\n<td>0.350</td>\n<td>0.312</td>\n</tr>\n<tr>\n<td></td>\n<td></td>\n<td></td>\n<td></td>\n<td></td>\n<td>ensemble</td>\n<td>0.411</td>\n<td>0.324</td>\n</tr>\n</tbody>\n</table>\n<h1>Did't work</h1>\n<ul>\n<li>Transformer / LSTM / 1dcnn+LSTM / wavenet :  did not improve score</li>\n<li>Data conversion by Fourier transform / MFCC:  score got worse</li>\n<li>RobustScaler: almost the same</li>\n<li>pseudo-labeling for notype and unlabeled-data: score got worse</li>\n<li>use Subject data: score got worse</li>\n<li>separate model for tdcsfog and defog: score got worse</li>\n</ul>\n<p>There were a few methods that worked for the top teams. I may have done something wrong.</p>\n<h1>My question</h1>\n<ul>\n<li>Why did I get similar scores with and without matching acceleration units?  (Sometimes it is better not to match)</li>\n<li>I didn't want to include Time_freq to make it a generic model. How can I improve my score without this?</li>\n</ul>\n<p>Thank you for reading.</p>",
  "messages": [
    {
      "id": "2293907",
      "postDate": "06/09/2023 15:11:43",
      "content": "<p>Thank you to the organizers for the fun competition and everyone who participated.<br>\nI share my solution.</p>\n<h1>Summary</h1>\n<ul>\n<li>dataset: tdcsofg + defog (not use notype/unlabeled)</li>\n<li>model: Conv1d NN (common model for tdcsfog and defog) </li>\n<li>6 models ensemble</li>\n</ul>\n<h1>1. baseline model</h1>\n<ul>\n<li>I use this notebook. <a href=\"https://www.kaggle.com/code/mayukh18/pytorch-fog-end-to-end-baseline-lb-0-254\" target=\"_blank\">PyTorch FOG End-to-End Baseline [LB 0.254] </a></li>\n<li>Thank you for <a href=\"https://www.kaggle.com/mayukh18\" target=\"_blank\">@mayukh18</a> </li>\n</ul>\n<h1>2. Validation Strategy</h1>\n<ul>\n<li>GroupKFold : 5-fold (groups=Subject)</li>\n<li>Since it was imbalanced data, I adjusted the seed so that the number of cases and the ratio would be the same as much as possible</li>\n</ul>\n<h1>3. Preprocess data</h1>\n<ul>\n<li>Align the units of acceleration (divided by 9.8066 for tdcsfog). </li>\n<li>features:<ul>\n<li>raw data: AccV, AccML, AccAP</li>\n<li>AccMG: np.sqrt(AccV^2 + AccML^2 + AccAP^2)</li>\n<li>Time_freq: df[\"Time\"] / df[\"Time\"].max()</li>\n<li>tdcs flag</li>\n<li>Rolling Window Features</li></ul></li>\n</ul>\n<pre><code>\nfor col in [, , , ]:\n    for w in [10, 50, 100, 1000]:\n        df[f] = df[col]\n        df[f] = df[col] - \\\n                                    df[col]\n        df[f] = df[col] - df[col]\n</code></pre>\n<h1>4. Model</h1>\n<ul>\n<li>I define 2 models.<ul>\n<li>model A: <ul>\n<li>input's feature: 54 features (all feature)</li>\n<li>window_size=32: past=24, future=8, wx=8</li>\n<li>Input - (Conv1d:ks=3/5/10 - GAP) x 3 - MLP - Outputs</li></ul></li>\n<li>model B:<ul>\n<li>input's feature: 6 features (3raw + MG + Time_freq + tdcs)</li>\n<li>window_size=256: past=192, future=64, wx=1</li>\n<li>Input - Conv1d:ks=90 - GAP - MLP - Outputs</li></ul></li></ul></li>\n<li>training parameter:<ul>\n<li>loss: BCEWithLogitsLoss / BCE+CELoss(4label)</li>\n<li>optimizer: Adam(2e-5)</li>\n<li>epoch: 10</li></ul></li>\n</ul>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F164129%2F1d909bdab5119592b4ed78f061040fb6%2Fmodel.png?generation=1686321028285326&amp;alt=media\" alt=\"model.jpg\"></p>\n<h1>5. Postprocess</h1>\n<ul>\n<li>moving average of predicted values: window=500</li>\n<li>label 1 is continuous so I could increase score just a little. (+0.004)</li>\n</ul>\n<h1>6. Ensemble</h1>\n<ul>\n<li>I trained 6 models.</li>\n<li>The ensemble method is an equally weighted average.</li>\n</ul>\n<table>\n<thead>\n<tr>\n<th>id</th>\n<th>inputs</th>\n<th>win_size</th>\n<th>Acc-units</th>\n<th>model</th>\n<th>local-cv</th>\n<th>public</th>\n<th>private</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>v10</td>\n<td>54feats</td>\n<td>32(wx=8)</td>\n<td>None</td>\n<td>modelA</td>\n<td>0.290</td>\n<td>0.392</td>\n<td>0.316</td>\n</tr>\n<tr>\n<td>v13</td>\n<td>54feats</td>\n<td>32(wx=8)</td>\n<td>None</td>\n<td>modelA (custom)</td>\n<td>0.300</td>\n<td>0.376</td>\n<td>0.305</td>\n</tr>\n<tr>\n<td>v51b</td>\n<td>54feats + 2feats</td>\n<td>48(wx=8)</td>\n<td>div by 9.8</td>\n<td>modelA</td>\n<td>0.302</td>\n<td>0.386</td>\n<td>0.321</td>\n</tr>\n<tr>\n<td>v60</td>\n<td>54feats</td>\n<td>32(wx=8)</td>\n<td>div by 9.8</td>\n<td>modelA (+CELoss)</td>\n<td>0.301</td>\n<td>0.388</td>\n<td>0.306</td>\n</tr>\n<tr>\n<td>v59</td>\n<td>54feats</td>\n<td>32(wx=8)</td>\n<td>None</td>\n<td>modelA (other cv)</td>\n<td>0.324</td>\n<td>0.390</td>\n<td>0.312</td>\n</tr>\n<tr>\n<td>v58</td>\n<td>3raw+3feats</td>\n<td>256(wx=1)</td>\n<td>div by 9.8</td>\n<td>modelB</td>\n<td>0.306</td>\n<td>0.350</td>\n<td>0.312</td>\n</tr>\n<tr>\n<td></td>\n<td></td>\n<td></td>\n<td></td>\n<td></td>\n<td>ensemble</td>\n<td>0.411</td>\n<td>0.324</td>\n</tr>\n</tbody>\n</table>\n<h1>Did't work</h1>\n<ul>\n<li>Transformer / LSTM / 1dcnn+LSTM / wavenet :  did not improve score</li>\n<li>Data conversion by Fourier transform / MFCC:  score got worse</li>\n<li>RobustScaler: almost the same</li>\n<li>pseudo-labeling for notype and unlabeled-data: score got worse</li>\n<li>use Subject data: score got worse</li>\n<li>separate model for tdcsfog and defog: score got worse</li>\n</ul>\n<p>There were a few methods that worked for the top teams. I may have done something wrong.</p>\n<h1>My question</h1>\n<ul>\n<li>Why did I get similar scores with and without matching acceleration units?  (Sometimes it is better not to match)</li>\n<li>I didn't want to include Time_freq to make it a generic model. How can I improve my score without this?</li>\n</ul>\n<p>Thank you for reading.</p>",
      "rawMarkdown": "Thank you to the organizers for the fun competition and everyone who participated.\nI share my solution.\n\n# Summary\n- dataset: tdcsofg + defog (not use notype/unlabeled)\n- model: Conv1d NN (common model for tdcsfog and defog) \n- 6 models ensemble\n\n# 1. baseline model\n- I use this notebook. [PyTorch FOG End-to-End Baseline [LB 0.254] ](https://www.kaggle.com/code/mayukh18/pytorch-fog-end-to-end-baseline-lb-0-254)\n- Thank you for @mayukh18 \n\n# 2. Validation Strategy\n- GroupKFold : 5-fold (groups=Subject)\n- Since it was imbalanced data, I adjusted the seed so that the number of cases and the ratio would be the same as much as possible\n\n# 3. Preprocess data\n- Align the units of acceleration (divided by 9.8066 for tdcsfog). \n- features:\n  - raw data: AccV, AccML, AccAP\n  - AccMG: np.sqrt(AccV^2 + AccML^2 + AccAP^2)\n  - Time_freq: df[\"Time\"] / df[\"Time\"].max()\n  - tdcs flag\n  - Rolling Window Features\n\n```\n# Rolling Window Features\nfor col in [\"AccV\", \"AccML\", \"AccAP\", \"AccMG\"]:\n    for w in [10, 50, 100, 1000]:\n        df[f\"{col}_win{w}_std\"] = df[col].rolling(window=w, min_periods=1).std().fillna(0)\n        df[f\"{col}_win{w}_delta\"] = df[col].rolling(window=w, min_periods=1).max() - \\\n                                    df[col].rolling(window=w, min_periods=1).min()\n        df[f\"{col}_win{w}_diff\"] = df[col] - df[col].rolling(window=w, min_periods=1).mean()\n```\n\n# 4. Model\n- I define 2 models.\n  - model A: \n      - input's feature: 54 features (all feature)\n      - window_size=32: past=24, future=8, wx=8\n      - Input - (Conv1d:ks=3/5/10 - GAP) x 3 - MLP - Outputs\n  - model B:\n      - input's feature: 6 features (3raw + MG + Time_freq + tdcs)\n      - window_size=256: past=192, future=64, wx=1\n      - Input - Conv1d:ks=90 - GAP - MLP - Outputs\n- training parameter:\n  - loss: BCEWithLogitsLoss / BCE+CELoss(4label)\n  - optimizer: Adam(2e-5)\n  - epoch: 10\n\n![model.jpg](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F164129%2F1d909bdab5119592b4ed78f061040fb6%2Fmodel.png?generation=1686321028285326&alt=media)\n\n# 5. Postprocess\n- moving average of predicted values: window=500\n- label 1 is continuous so I could increase score just a little. (+0.004)\n\n# 6. Ensemble\n- I trained 6 models.\n- The ensemble method is an equally weighted average.\n\n| id | inputs| win_size | Acc-units | model | local-cv | public | private |\n|---|---|---:|---|---:|---:|---:|\n| v10 | 54feats |32(wx=8) | None | modelA | 0.290 | 0.392 | 0.316 |\n| v13 | 54feats |32(wx=8) | None | modelA (custom) | 0.300 | 0.376 | 0.305 |\n| v51b | 54feats + 2feats |48(wx=8) | div by 9.8| modelA | 0.302 | 0.386 | 0.321 |\n| v60 | 54feats |32(wx=8)| div by 9.8|  modelA (+CELoss) | 0.301 | 0.388 | 0.306 |\n| v59 | 54feats |32(wx=8) |None | modelA (other cv) | 0.324 | 0.390 | 0.312 |\n| v58 | 3raw+3feats |256(wx=1) | div by 9.8| modelB | 0.306 | 0.350 | 0.312 |\n|  |  |  |   | | ensemble  | 0.411 | 0.324 |\n\n# Did't work\n- Transformer / LSTM / 1dcnn+LSTM / wavenet :  did not improve score\n- Data conversion by Fourier transform / MFCC:  score got worse\n- RobustScaler: almost the same\n- pseudo-labeling for notype and unlabeled-data: score got worse\n- use Subject data: score got worse\n- separate model for tdcsfog and defog: score got worse\n\nThere were a few methods that worked for the top teams. I may have done something wrong.\n\n# My question\n- Why did I get similar scores with and without matching acceleration units?  (Sometimes it is better not to match)\n- I didn't want to include Time_freq to make it a generic model. How can I improve my score without this?\n\nThank you for reading.",
      "votes": null
    },
    {
      "id": "2294598",
      "postDate": "06/10/2023 07:20:06",
      "content": "<p>Hi Moro. Congratulations!🎉🎉 Thank you for your sharing solution. It is impressive and very useful for me to learn.</p>",
      "rawMarkdown": "Hi Moro. Congratulations!🎉🎉 Thank you for your sharing solution. It is impressive and very useful for me to learn.",
      "votes": null
    },
    {
      "id": "2296672",
      "postDate": "06/12/2023 04:05:28",
      "content": "<p>For your 1st question, I saw others who also saw their model performance decrease with matching acceleration units (e.g. 10th place winner). I suspect the reason is that the model learns to differentiate between defog and tdcsfog data based on the magnitude of acceleration values and applies a different classification to the provided sample based on that.</p>",
      "rawMarkdown": "For your 1st question, I saw others who also saw their model performance decrease with matching acceleration units (e.g. 10th place winner). I suspect the reason is that the model learns to differentiate between defog and tdcsfog data based on the magnitude of acceleration values and applies a different classification to the provided sample based on that.",
      "votes": null
    },
    {
      "id": "2297208",
      "postDate": "06/12/2023 12:22:27",
      "content": "<p>Thank you for your comment. I understood by your explanation.<br>\nIn most of my experiments, I got better results when the units were not aligned.  Since the tdcsfog/defog distributions were different, it may be difficult to learn the model by aligning the units.  This may be the reason why many of the top teams had different models.</p>",
      "rawMarkdown": "Thank you for your comment. I understood by your explanation.\nIn most of my experiments, I got better results when the units were not aligned.  Since the tdcsfog/defog distributions were different, it may be difficult to learn the model by aligning the units.  This may be the reason why many of the top teams had different models.",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 2294598,
      "author_name": "abrachan",
      "author_url": "",
      "post_date": "06/10/2023 07:20:06",
      "content": "<p>Hi Moro. Congratulations!🎉🎉 Thank you for your sharing solution. It is impressive and very useful for me to learn.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 2296672,
      "author_name": "coderrkj",
      "author_url": "",
      "post_date": "06/12/2023 04:05:28",
      "content": "<p>For your 1st question, I saw others who also saw their model performance decrease with matching acceleration units (e.g. 10th place winner). I suspect the reason is that the model learns to differentiate between defog and tdcsfog data based on the magnitude of acceleration values and applies a different classification to the provided sample based on that.</p>",
      "votes": null,
      "replies": [
        {
          "id": 2297208,
          "author_name": "moromoromoro",
          "author_url": "",
          "post_date": "06/12/2023 12:22:27",
          "content": "<p>Thank you for your comment. I understood by your explanation.<br>\nIn most of my experiments, I got better results when the units were not aligned.  Since the tdcsfog/defog distributions were different, it may be difficult to learn the model by aligning the units.  This may be the reason why many of the top teams had different models.</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "2293907": "Thank you to the organizers for the fun competition and everyone who participated.\nI share my solution.\n\n# Summary\n- dataset: tdcsofg + defog (not use notype/unlabeled)\n- model: Conv1d NN (common model for tdcsfog and defog) \n- 6 models ensemble\n\n# 1. baseline model\n- I use this notebook. [PyTorch FOG End-to-End Baseline [LB 0.254] ](https://www.kaggle.com/code/mayukh18/pytorch-fog-end-to-end-baseline-lb-0-254)\n- Thank you for @mayukh18 \n\n# 2. Validation Strategy\n- GroupKFold : 5-fold (groups=Subject)\n- Since it was imbalanced data, I adjusted the seed so that the number of cases and the ratio would be the same as much as possible\n\n# 3. Preprocess data\n- Align the units of acceleration (divided by 9.8066 for tdcsfog). \n- features:\n  - raw data: AccV, AccML, AccAP\n  - AccMG: np.sqrt(AccV^2 + AccML^2 + AccAP^2)\n  - Time_freq: df[\"Time\"] / df[\"Time\"].max()\n  - tdcs flag\n  - Rolling Window Features\n\n```\n# Rolling Window Features\nfor col in [\"AccV\", \"AccML\", \"AccAP\", \"AccMG\"]:\n    for w in [10, 50, 100, 1000]:\n        df[f\"{col}_win{w}_std\"] = df[col].rolling(window=w, min_periods=1).std().fillna(0)\n        df[f\"{col}_win{w}_delta\"] = df[col].rolling(window=w, min_periods=1).max() - \\\n                                    df[col].rolling(window=w, min_periods=1).min()\n        df[f\"{col}_win{w}_diff\"] = df[col] - df[col].rolling(window=w, min_periods=1).mean()\n```\n\n# 4. Model\n- I define 2 models.\n  - model A: \n      - input's feature: 54 features (all feature)\n      - window_size=32: past=24, future=8, wx=8\n      - Input - (Conv1d:ks=3/5/10 - GAP) x 3 - MLP - Outputs\n  - model B:\n      - input's feature: 6 features (3raw + MG + Time_freq + tdcs)\n      - window_size=256: past=192, future=64, wx=1\n      - Input - Conv1d:ks=90 - GAP - MLP - Outputs\n- training parameter:\n  - loss: BCEWithLogitsLoss / BCE+CELoss(4label)\n  - optimizer: Adam(2e-5)\n  - epoch: 10\n\n![model.jpg](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F164129%2F1d909bdab5119592b4ed78f061040fb6%2Fmodel.png?generation=1686321028285326&alt=media)\n\n# 5. Postprocess\n- moving average of predicted values: window=500\n- label 1 is continuous so I could increase score just a little. (+0.004)\n\n# 6. Ensemble\n- I trained 6 models.\n- The ensemble method is an equally weighted average.\n\n| id | inputs| win_size | Acc-units | model | local-cv | public | private |\n|---|---|---:|---|---:|---:|---:|\n| v10 | 54feats |32(wx=8) | None | modelA | 0.290 | 0.392 | 0.316 |\n| v13 | 54feats |32(wx=8) | None | modelA (custom) | 0.300 | 0.376 | 0.305 |\n| v51b | 54feats + 2feats |48(wx=8) | div by 9.8| modelA | 0.302 | 0.386 | 0.321 |\n| v60 | 54feats |32(wx=8)| div by 9.8|  modelA (+CELoss) | 0.301 | 0.388 | 0.306 |\n| v59 | 54feats |32(wx=8) |None | modelA (other cv) | 0.324 | 0.390 | 0.312 |\n| v58 | 3raw+3feats |256(wx=1) | div by 9.8| modelB | 0.306 | 0.350 | 0.312 |\n|  |  |  |   | | ensemble  | 0.411 | 0.324 |\n\n# Did't work\n- Transformer / LSTM / 1dcnn+LSTM / wavenet :  did not improve score\n- Data conversion by Fourier transform / MFCC:  score got worse\n- RobustScaler: almost the same\n- pseudo-labeling for notype and unlabeled-data: score got worse\n- use Subject data: score got worse\n- separate model for tdcsfog and defog: score got worse\n\nThere were a few methods that worked for the top teams. I may have done something wrong.\n\n# My question\n- Why did I get similar scores with and without matching acceleration units?  (Sometimes it is better not to match)\n- I didn't want to include Time_freq to make it a generic model. How can I improve my score without this?\n\nThank you for reading.",
    "2294598": "Hi Moro. Congratulations!🎉🎉 Thank you for your sharing solution. It is impressive and very useful for me to learn.",
    "2296672": "For your 1st question, I saw others who also saw their model performance decrease with matching acceleration units (e.g. 10th place winner). I suspect the reason is that the model learns to differentiate between defog and tdcsfog data based on the magnitude of acceleration values and applies a different classification to the provided sample based on that.",
    "2297208": "Thank you for your comment. I understood by your explanation.\nIn most of my experiments, I got better results when the units were not aligned.  Since the tdcsfog/defog distributions were different, it may be difficult to learn the model by aligning the units.  This may be the reason why many of the top teams had different models."
  },
  "source": "meta"
}