{
  "id": 384884,
  "title": "EDA: Some challenges with coordinate data",
  "url": "/competitions/predict-student-performance-from-game-play/discussion/384884",
  "author_name": "",
  "post_date": "2023-02-10T02:56:32.826279800Z",
  "votes": 13,
  "comment_count": 5,
  "views": 0,
  "content": "<h3>Challenge 1: It was the <em>prior</em> click.</h3>\n<p>Example:<br>\nOn the first level, you click on the notebook and the text pops up \"Found it!\"</p>\n<pre><code>index = train[train.text == ].index.values\n(display(train.loc[index]))\n(train.loc[index, [, , , ]].describe())\n()\n(train.loc[index-, [, , , ]].describe())\n\nThe  click:\n       room_coor_x   room_coor_y  screen_coor_x  screen_coor_y\ncount          \nmean    -   -          \nstd                    \n    -   -              \n%     -   -          \n%     -   -          \n%     -   -          \n     -            \n\nvs the prior click ( on the  fqid):\n\n       room_coor_x   room_coor_y  screen_coor_x  screen_coor_y\ncount          \nmean    -   -           \nstd                        \n     -   -             \n%     -   -           \n%     -   -           \n%     -   -           \n     -             \n</code></pre>\n<p><b>Takeaway</b>: Just be careful which event you are trying to pay attention to coordinates on.<br>\n<br></p>\n<h3>Challenge 2: Screen resolution.</h3>\n<p>See discussion here: <a href=\"https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384534\" target=\"_blank\">https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384534</a></p>\n<p><br></p>\n<h3>Challenge 3: Inexplicable outliers.</h3>\n<p>The room coordinates shouldn't have issue #2, above, but for some reason even very clear \"must happen in an exact spot in the corner\" events like the notebook click, above, or the first ever notebook 'close' click have very strange min/max. Although the std_dev seems about right for the width of the button.</p>\n<p>The (very first) notebook close as a secondary example of the same phenomenon:</p>\n<pre><code>index = train[(train.level == ) &amp; (train.name == ) &amp; (train.fqid == ) &amp; (train.room_fqid == )].index.values\n(train.loc[index, [, , , ]].describe())\n\n       room_coor_x   room_coor_y  screen_coor_x  screen_coor_y\ncount          \nmean    -               \nstd                        \n     -               \n%     -               \n%     -               \n%     -               \n     -             \n</code></pre>",
  "messages": [
    {
      "id": "2137453",
      "postDate": "02/10/2023 02:56:32",
      "content": "<h3>Challenge 1: It was the <em>prior</em> click.</h3>\n<p>Example:<br>\nOn the first level, you click on the notebook and the text pops up \"Found it!\"</p>\n<pre><code>index = train[train.text == ].index.values\n(display(train.loc[index]))\n(train.loc[index, [, , , ]].describe())\n()\n(train.loc[index-, [, , , ]].describe())\n\nThe  click:\n       room_coor_x   room_coor_y  screen_coor_x  screen_coor_y\ncount          \nmean    -   -          \nstd                    \n    -   -              \n%     -   -          \n%     -   -          \n%     -   -          \n     -            \n\nvs the prior click ( on the  fqid):\n\n       room_coor_x   room_coor_y  screen_coor_x  screen_coor_y\ncount          \nmean    -   -           \nstd                        \n     -   -             \n%     -   -           \n%     -   -           \n%     -   -           \n     -             \n</code></pre>\n<p><b>Takeaway</b>: Just be careful which event you are trying to pay attention to coordinates on.<br>\n<br></p>\n<h3>Challenge 2: Screen resolution.</h3>\n<p>See discussion here: <a href=\"https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384534\" target=\"_blank\">https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384534</a></p>\n<p><br></p>\n<h3>Challenge 3: Inexplicable outliers.</h3>\n<p>The room coordinates shouldn't have issue #2, above, but for some reason even very clear \"must happen in an exact spot in the corner\" events like the notebook click, above, or the first ever notebook 'close' click have very strange min/max. Although the std_dev seems about right for the width of the button.</p>\n<p>The (very first) notebook close as a secondary example of the same phenomenon:</p>\n<pre><code>index = train[(train.level == ) &amp; (train.name == ) &amp; (train.fqid == ) &amp; (train.room_fqid == )].index.values\n(train.loc[index, [, , , ]].describe())\n\n       room_coor_x   room_coor_y  screen_coor_x  screen_coor_y\ncount          \nmean    -               \nstd                        \n     -               \n%     -               \n%     -               \n%     -               \n     -             \n</code></pre>",
      "rawMarkdown": "### Challenge 1: It was the *prior* click.\nExample:\nOn the first level, you click on the notebook and the text pops up \"Found it!\"\n\n```python\nindex = train[train.text == 'Found it!'].index.values\nprint(display(train.loc[index]))\nprint(train.loc[index, ['room_coor_x', 'room_coor_y', 'screen_coor_x', 'screen_coor_y']].describe())\nprint('\\nvs\\n')\nprint(train.loc[index-1, ['room_coor_x', 'room_coor_y', 'screen_coor_x', 'screen_coor_y']].describe())\n\nThe 'Found it!' click:\n       room_coor_x   room_coor_y  screen_coor_x  screen_coor_y\ncount  11962.000000  11962.000000   11962.000000   11962.000000\nmean    -530.121325   -199.904642     499.307538     480.318910\nstd      170.119190    168.434369     178.662292     173.084855\nmin    -1017.660538   -384.916943       4.000000       0.000000\n25%     -595.848185   -337.684219     431.000000     389.000000\n50%     -563.644471   -256.375169     466.000000     536.000000\n75%     -432.682367   -110.924490     599.000000     614.000000\nmax     -141.584495    275.635133    1402.000000    1420.000000\n\nvs the prior click ('navigation_click' on the 'notebook' fqid):\n\n       room_coor_x   room_coor_y  screen_coor_x  screen_coor_y\ncount  11962.000000  11962.000000   11962.000000   11962.000000\nmean    -900.576908   -251.969933      62.463856     548.726679\nstd       30.860905     20.356583      39.883689      40.676667\nmin     -956.530043   -362.897808       0.000000      55.000000\n25%     -915.809436   -264.258538      41.000000     529.000000\n50%     -901.484223   -252.883220      58.000000     545.000000\n75%     -887.149388   -240.074140      76.000000     562.000000\nmax     -155.268556    220.121866     872.000000    1233.000000\n```\n\n<b>Takeaway</b>: Just be careful which event you are trying to pay attention to coordinates on.\n<br>\n\n### Challenge 2: Screen resolution.\nSee discussion here: https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384534\n\n<br>\n\n### Challenge 3: Inexplicable outliers.\nThe room coordinates shouldn't have issue #2, above, but for some reason even very clear \"must happen in an exact spot in the corner\" events like the notebook click, above, or the first ever notebook 'close' click have very strange min/max. Although the std_dev seems about right for the width of the button.\n\nThe (very first) notebook close as a secondary example of the same phenomenon:\n\n```python\nindex = train[(train.level == 0) & (train.name == 'close') & (train.fqid == 'notebook') & (train.room_fqid == 'tunic.historicalsociety.closet')].index.values\nprint(train.loc[index, ['room_coor_x', 'room_coor_y', 'screen_coor_x', 'screen_coor_y']].describe())\n\n       room_coor_x   room_coor_y  screen_coor_x  screen_coor_y\ncount  11915.000000  11915.000000   11915.000000   11915.000000\nmean    -203.959580    215.241451     832.433116      60.316715\nstd       16.394494     16.332084      54.790609      16.213486\nmin     -284.589415    140.753687     443.000000      10.000000\n25%     -215.532076    204.082065     813.000000      49.000000\n50%     -204.327080    215.082083     825.000000      61.000000\n75%     -192.623995    226.150266     837.000000      72.000000\nmax     -151.241270    267.160388    1860.000000     100.000000\n```",
      "votes": null
    },
    {
      "id": "2145311",
      "postDate": "02/14/2023 23:32:24",
      "content": "<blockquote>\n  <p>It was the prior click</p>\n</blockquote>\n<p>I think it depends on your definition of prior. Each row's click coordinates are what a user does when they see the details in the columns (of that same row). So when i see <code>row.text == 'Found it!'</code> then i am looking at the following screen shot. And a histogram of screen clicks for that same row are displayed below:</p>\n<p><img src=\"https://raw.githubusercontent.com/cdeotte/Kaggle_Images/main/Feb-2023/found-clicks.png\" alt=\"\"></p>",
      "rawMarkdown": ">It was the prior click\n\nI think it depends on your definition of prior. Each row's click coordinates are what a user does when they see the details in the columns (of that same row). So when i see `row.text == 'Found it!'` then i am looking at the following screen shot. And a histogram of screen clicks for that same row are displayed below:\n\n![](https://raw.githubusercontent.com/cdeotte/Kaggle_Images/main/Feb-2023/found-clicks.png)",
      "votes": null
    },
    {
      "id": "2145317",
      "postDate": "02/14/2023 23:55:31",
      "content": "<p>You are saying what I was trying to say, but more eloquently. :)</p>\n<p>Do you think the 'elapsed time' number is the time up to when \"Found it!\" was printed, or the time up until they clicked again AFTER it was printed?</p>",
      "rawMarkdown": "You are saying what I was trying to say, but more eloquently. :)\n\nDo you think the 'elapsed time' number is the time up to when \"Found it!\" was printed, or the time up until they clicked again AFTER it was printed?",
      "votes": null
    },
    {
      "id": "2145332",
      "postDate": "02/15/2023 00:40:02",
      "content": "<p>Previously I assumed AFTER. For example I previously assumed that the time it took the user to read the message <code>Found it!</code> and then click the screen is the <code>elapsed_time</code> of the row with <code>row.text=='Found it!'</code> minus the <code>elapsed_time</code> of the previous row. However, each user <code>index=0</code> has <code>elapsed_time=0</code> which contradicts this assumption. So either <code>index=0</code> behaves differently, or elapsed time of reading <code>Found it!</code> is the row after minus the current row. I will need to do some more EDA.</p>",
      "rawMarkdown": "Previously I assumed AFTER. For example I previously assumed that the time it took the user to read the message `Found it!` and then click the screen is the `elapsed_time` of the row with `row.text=='Found it!'` minus the `elapsed_time` of the previous row. However, each user `index=0` has `elapsed_time=0` which contradicts this assumption. So either `index=0` behaves differently, or elapsed time of reading `Found it!` is the row after minus the current row. I will need to do some more EDA.",
      "votes": null
    },
    {
      "id": "2169584",
      "postDate": "03/05/2023 08:18:54",
      "content": "<p>I'm not very sure, but my assumptions are</p>\n<ul>\n<li>Session starts from first event --&gt; <code>index=0</code> always has <code>elapsed_time=0</code></li>\n<li>Elapsed time of an action is current row minus previous row. For example, the time user needs to read <code>Found it!</code> and click = (<code>elapsed_time</code> of <code>Found it!</code>) - (<code>elapsed_time</code> of row before).</li>\n</ul>\n<p><a href=\"https://www.kaggle.com/cdeotte\" target=\"_blank\">@cdeotte</a> were you able to check your assumption that elapsed time of an action is the row after minus the current row?</p>",
      "rawMarkdown": "I'm not very sure, but my assumptions are\n- Session starts from first event --> `index=0` always has `elapsed_time=0`\n- Elapsed time of an action is current row minus previous row. For example, the time user needs to read `Found it!` and click = (`elapsed_time` of `Found it!`) - (`elapsed_time` of row before).\n\n@cdeotte were you able to check your assumption that elapsed time of an action is the row after minus the current row?",
      "votes": null
    },
    {
      "id": "2173083",
      "postDate": "03/08/2023 04:24:12",
      "content": "<p>Hi <a href=\"https://www.kaggle.com/hoangnguyen719\" target=\"_blank\">@hoangnguyen719</a> , Here are my observations:</p>\n<p>Firstly, I agree with the assumption that <code>index=0</code> should imply <code>elapsed_time=0</code>. Since the beginning of the competition, there has been several discussions concerning these two features. The competition host actually confirmed what you said, see <a href=\"https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384342\" target=\"_blank\">this discussion</a>.</p>\n<p>Then there is the <code>elapsed_time</code>. According to the <a href=\"https://www.kaggle.com/competitions/predict-student-performance-from-game-play/data\" target=\"_blank\">definition</a>, this is</p>\n<blockquote>\n  <p>the time has passed (in milliseconds) between the start of the session and when the event was recorded</p>\n</blockquote>\n<p>So naturally, this leads to the perception that <code>elapsed_time</code> should increase monotonically. But, as others have pointed out, there are many exceptions which are likely caused by <a href=\"https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384342\" target=\"_blank\">data error</a>.</p>\n<p>Lastly, regarding how <code>elapsed_time</code> is logged in the game. I am no java expert, but the <a href=\"https://github.com/fielddaylab/jo_wilder/blob/5082da4057f30dd0917c97a65f2aa7be13469f79/src/utils/log_events.js\" target=\"_blank\">source code</a> of event logger seems to suggest that the <em>start_time</em> of an event is always nullified at the beginning of the event, and the logger just records the time it takes for the specific event to complete. See line 324 of the source code. If this interpretation is correct, then it appears that the <code>elapsed_time</code> is the aggregation of individual event duration.</p>",
      "rawMarkdown": "Hi @hoangnguyen719 , Here are my observations:\n\nFirstly, I agree with the assumption that `index=0` should imply `elapsed_time=0`. Since the beginning of the competition, there has been several discussions concerning these two features. The competition host actually confirmed what you said, see [this discussion](https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384342).\n\nThen there is the `elapsed_time`. According to the [definition](https://www.kaggle.com/competitions/predict-student-performance-from-game-play/data), this is\n> the time has passed (in milliseconds) between the start of the session and when the event was recorded\n\nSo naturally, this leads to the perception that `elapsed_time` should increase monotonically. But, as others have pointed out, there are many exceptions which are likely caused by [data error](https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384342).\n\nLastly, regarding how `elapsed_time` is logged in the game. I am no java expert, but the [source code](https://github.com/fielddaylab/jo_wilder/blob/5082da4057f30dd0917c97a65f2aa7be13469f79/src/utils/log_events.js) of event logger seems to suggest that the *start_time* of an event is always nullified at the beginning of the event, and the logger just records the time it takes for the specific event to complete. See line 324 of the source code. If this interpretation is correct, then it appears that the `elapsed_time` is the aggregation of individual event duration.",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 2145311,
      "author_name": "cdeotte",
      "author_url": "",
      "post_date": "02/14/2023 23:32:24",
      "content": "<blockquote>\n  <p>It was the prior click</p>\n</blockquote>\n<p>I think it depends on your definition of prior. Each row's click coordinates are what a user does when they see the details in the columns (of that same row). So when i see <code>row.text == 'Found it!'</code> then i am looking at the following screen shot. And a histogram of screen clicks for that same row are displayed below:</p>\n<p><img src=\"https://raw.githubusercontent.com/cdeotte/Kaggle_Images/main/Feb-2023/found-clicks.png\" alt=\"\"></p>",
      "votes": null,
      "replies": [
        {
          "id": 2145317,
          "author_name": "roberthatch",
          "author_url": "",
          "post_date": "02/14/2023 23:55:31",
          "content": "<p>You are saying what I was trying to say, but more eloquently. :)</p>\n<p>Do you think the 'elapsed time' number is the time up to when \"Found it!\" was printed, or the time up until they clicked again AFTER it was printed?</p>",
          "votes": null,
          "replies": [
            {
              "id": 2145332,
              "author_name": "cdeotte",
              "author_url": "",
              "post_date": "02/15/2023 00:40:02",
              "content": "<p>Previously I assumed AFTER. For example I previously assumed that the time it took the user to read the message <code>Found it!</code> and then click the screen is the <code>elapsed_time</code> of the row with <code>row.text=='Found it!'</code> minus the <code>elapsed_time</code> of the previous row. However, each user <code>index=0</code> has <code>elapsed_time=0</code> which contradicts this assumption. So either <code>index=0</code> behaves differently, or elapsed time of reading <code>Found it!</code> is the row after minus the current row. I will need to do some more EDA.</p>",
              "votes": null,
              "replies": [
                {
                  "id": 2169584,
                  "author_name": "hoangnguyen719",
                  "author_url": "",
                  "post_date": "03/05/2023 08:18:54",
                  "content": "<p>I'm not very sure, but my assumptions are</p>\n<ul>\n<li>Session starts from first event --&gt; <code>index=0</code> always has <code>elapsed_time=0</code></li>\n<li>Elapsed time of an action is current row minus previous row. For example, the time user needs to read <code>Found it!</code> and click = (<code>elapsed_time</code> of <code>Found it!</code>) - (<code>elapsed_time</code> of row before).</li>\n</ul>\n<p><a href=\"https://www.kaggle.com/cdeotte\" target=\"_blank\">@cdeotte</a> were you able to check your assumption that elapsed time of an action is the row after minus the current row?</p>",
                  "votes": null,
                  "replies": [
                    {
                      "id": 2173083,
                      "author_name": "randwlkr",
                      "author_url": "",
                      "post_date": "03/08/2023 04:24:12",
                      "content": "<p>Hi <a href=\"https://www.kaggle.com/hoangnguyen719\" target=\"_blank\">@hoangnguyen719</a> , Here are my observations:</p>\n<p>Firstly, I agree with the assumption that <code>index=0</code> should imply <code>elapsed_time=0</code>. Since the beginning of the competition, there has been several discussions concerning these two features. The competition host actually confirmed what you said, see <a href=\"https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384342\" target=\"_blank\">this discussion</a>.</p>\n<p>Then there is the <code>elapsed_time</code>. According to the <a href=\"https://www.kaggle.com/competitions/predict-student-performance-from-game-play/data\" target=\"_blank\">definition</a>, this is</p>\n<blockquote>\n  <p>the time has passed (in milliseconds) between the start of the session and when the event was recorded</p>\n</blockquote>\n<p>So naturally, this leads to the perception that <code>elapsed_time</code> should increase monotonically. But, as others have pointed out, there are many exceptions which are likely caused by <a href=\"https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384342\" target=\"_blank\">data error</a>.</p>\n<p>Lastly, regarding how <code>elapsed_time</code> is logged in the game. I am no java expert, but the <a href=\"https://github.com/fielddaylab/jo_wilder/blob/5082da4057f30dd0917c97a65f2aa7be13469f79/src/utils/log_events.js\" target=\"_blank\">source code</a> of event logger seems to suggest that the <em>start_time</em> of an event is always nullified at the beginning of the event, and the logger just records the time it takes for the specific event to complete. See line 324 of the source code. If this interpretation is correct, then it appears that the <code>elapsed_time</code> is the aggregation of individual event duration.</p>",
                      "votes": null,
                      "replies": []
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "2137453": "### Challenge 1: It was the *prior* click.\nExample:\nOn the first level, you click on the notebook and the text pops up \"Found it!\"\n\n```python\nindex = train[train.text == 'Found it!'].index.values\nprint(display(train.loc[index]))\nprint(train.loc[index, ['room_coor_x', 'room_coor_y', 'screen_coor_x', 'screen_coor_y']].describe())\nprint('\\nvs\\n')\nprint(train.loc[index-1, ['room_coor_x', 'room_coor_y', 'screen_coor_x', 'screen_coor_y']].describe())\n\nThe 'Found it!' click:\n       room_coor_x   room_coor_y  screen_coor_x  screen_coor_y\ncount  11962.000000  11962.000000   11962.000000   11962.000000\nmean    -530.121325   -199.904642     499.307538     480.318910\nstd      170.119190    168.434369     178.662292     173.084855\nmin    -1017.660538   -384.916943       4.000000       0.000000\n25%     -595.848185   -337.684219     431.000000     389.000000\n50%     -563.644471   -256.375169     466.000000     536.000000\n75%     -432.682367   -110.924490     599.000000     614.000000\nmax     -141.584495    275.635133    1402.000000    1420.000000\n\nvs the prior click ('navigation_click' on the 'notebook' fqid):\n\n       room_coor_x   room_coor_y  screen_coor_x  screen_coor_y\ncount  11962.000000  11962.000000   11962.000000   11962.000000\nmean    -900.576908   -251.969933      62.463856     548.726679\nstd       30.860905     20.356583      39.883689      40.676667\nmin     -956.530043   -362.897808       0.000000      55.000000\n25%     -915.809436   -264.258538      41.000000     529.000000\n50%     -901.484223   -252.883220      58.000000     545.000000\n75%     -887.149388   -240.074140      76.000000     562.000000\nmax     -155.268556    220.121866     872.000000    1233.000000\n```\n\n<b>Takeaway</b>: Just be careful which event you are trying to pay attention to coordinates on.\n<br>\n\n### Challenge 2: Screen resolution.\nSee discussion here: https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384534\n\n<br>\n\n### Challenge 3: Inexplicable outliers.\nThe room coordinates shouldn't have issue #2, above, but for some reason even very clear \"must happen in an exact spot in the corner\" events like the notebook click, above, or the first ever notebook 'close' click have very strange min/max. Although the std_dev seems about right for the width of the button.\n\nThe (very first) notebook close as a secondary example of the same phenomenon:\n\n```python\nindex = train[(train.level == 0) & (train.name == 'close') & (train.fqid == 'notebook') & (train.room_fqid == 'tunic.historicalsociety.closet')].index.values\nprint(train.loc[index, ['room_coor_x', 'room_coor_y', 'screen_coor_x', 'screen_coor_y']].describe())\n\n       room_coor_x   room_coor_y  screen_coor_x  screen_coor_y\ncount  11915.000000  11915.000000   11915.000000   11915.000000\nmean    -203.959580    215.241451     832.433116      60.316715\nstd       16.394494     16.332084      54.790609      16.213486\nmin     -284.589415    140.753687     443.000000      10.000000\n25%     -215.532076    204.082065     813.000000      49.000000\n50%     -204.327080    215.082083     825.000000      61.000000\n75%     -192.623995    226.150266     837.000000      72.000000\nmax     -151.241270    267.160388    1860.000000     100.000000\n```",
    "2145311": ">It was the prior click\n\nI think it depends on your definition of prior. Each row's click coordinates are what a user does when they see the details in the columns (of that same row). So when i see `row.text == 'Found it!'` then i am looking at the following screen shot. And a histogram of screen clicks for that same row are displayed below:\n\n![](https://raw.githubusercontent.com/cdeotte/Kaggle_Images/main/Feb-2023/found-clicks.png)",
    "2145317": "You are saying what I was trying to say, but more eloquently. :)\n\nDo you think the 'elapsed time' number is the time up to when \"Found it!\" was printed, or the time up until they clicked again AFTER it was printed?",
    "2145332": "Previously I assumed AFTER. For example I previously assumed that the time it took the user to read the message `Found it!` and then click the screen is the `elapsed_time` of the row with `row.text=='Found it!'` minus the `elapsed_time` of the previous row. However, each user `index=0` has `elapsed_time=0` which contradicts this assumption. So either `index=0` behaves differently, or elapsed time of reading `Found it!` is the row after minus the current row. I will need to do some more EDA.",
    "2169584": "I'm not very sure, but my assumptions are\n- Session starts from first event --> `index=0` always has `elapsed_time=0`\n- Elapsed time of an action is current row minus previous row. For example, the time user needs to read `Found it!` and click = (`elapsed_time` of `Found it!`) - (`elapsed_time` of row before).\n\n@cdeotte were you able to check your assumption that elapsed time of an action is the row after minus the current row?",
    "2173083": "Hi @hoangnguyen719 , Here are my observations:\n\nFirstly, I agree with the assumption that `index=0` should imply `elapsed_time=0`. Since the beginning of the competition, there has been several discussions concerning these two features. The competition host actually confirmed what you said, see [this discussion](https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384342).\n\nThen there is the `elapsed_time`. According to the [definition](https://www.kaggle.com/competitions/predict-student-performance-from-game-play/data), this is\n> the time has passed (in milliseconds) between the start of the session and when the event was recorded\n\nSo naturally, this leads to the perception that `elapsed_time` should increase monotonically. But, as others have pointed out, there are many exceptions which are likely caused by [data error](https://www.kaggle.com/competitions/predict-student-performance-from-game-play/discussion/384342).\n\nLastly, regarding how `elapsed_time` is logged in the game. I am no java expert, but the [source code](https://github.com/fielddaylab/jo_wilder/blob/5082da4057f30dd0917c97a65f2aa7be13469f79/src/utils/log_events.js) of event logger seems to suggest that the *start_time* of an event is always nullified at the beginning of the event, and the logger just records the time it takes for the specific event to complete. See line 324 of the source code. If this interpretation is correct, then it appears that the `elapsed_time` is the aggregation of individual event duration."
  },
  "source": "meta"
}