Interaction sessions
Last updated
Last updated
Unizin Homepage
unizin.orgHosted Services
My Learning AnalyticsCopyright © 2023, Unizin, Ltd.
The purpose of this mart is to approximate an answer to a basic question: how much time do students spend in using the LMS and learning tools for their learning-related activities in a course?
The concept of a bounded “interaction session” is central to measure at the heart of the data mart. There is no canonical way to measure an “interaction session” in the learning analytics literature. We propose to use one of the least-controversial algorithms. In the end, we should prepare for a future in which different algorithms are used in parallel marts.
Nevertheless, the purpose of this mart is to capture the “interaction sessions” of a person in a course, where a “session” represents a duration of time defined by rules that govern when a session begins and ends.
There are two interaction sessions marts: mart_course_offering.interaction_sessions and mart_course_section.interaction_sessions. The former mart captures the interaction sessions of a person in a course offering, while the latter part captures the interaction sessions of a person in a course section.
mart_course_offering
mart_course_section
The following visualization shows the construction of this data mart defined in the UDP marts repository. More information on the repository and diagram can be found on this marts page.
Field | Type | Description |
---|---|---|
udp_course_offering_id | INTEGER | The UDP ID of the course offering. |
lms_course_offering_id | STRING | The LMS ID of the course offering. |
udp_person_id | INTEGER | The UDP ID of the person. |
lms_person_id | STRING | The LMS ID of the person. |
academic_organization_display | STRING | The name of the academic organization(s) associated with the course offering as a string with comma separation. |
academic_organization_array | ARRAY<STRING> | Array of academic organization(s) associated with the course offering. |
academic_term_name | STRING | The name of the academic term, i.e. Fall 2020. |
academic_term_start_date | DATE | The start date for the academic term. |
course_offering_title | STRING | The title of the Course offering, i.e. Linear Algebra. |
course_offering_start_date | DATE | The start date of the Course offering. |
course_offering_subject | STRING | The subject of the Course offering, i.e. MATH. |
course_offering_number | STRING | The number of the Course offering, i.e. 310. |
course_offering_code | STRING | The code of the Course offering, i.e. MATH 310. |
instructor_display | STRING | An array of all the instructor’s names for the Course offering written as a string. |
instructor_name_array | ARRAY<STRING> | An array of all the instructor’s names for the Course offering. |
instructor_email_address_display | STRING | An array of all the instructor email addresses for the Course offering written as a comma-separated string. |
instructor_email_address_array | ARRAY<STRING> | An array of all the instructor email addresses for the Course offering. |
person_name | STRING | The name of the person. |
role | STRING | The role of the person in the Course offering, i.e. Student, Teacher. |
week_in_term | INTEGER | The week of the academic term. |
week_start_date | DATE | The start date of the week of the academic term. |
week_end_date | DATE | The end date of the week of the academic term. |
session_date | DATE | The date of the session. |
num_sessions_10min | INTEGER | Based on a 10 minute cutoff for interaction sessions, the number of interaction sessions for the person in the Course offering for the given session date. |
total_time_seconds_10min | INTEGER | Based on a 10 minute cutoff for interaction sessions, the total time spent in seconds in interaction sessions for the person in the course offering for the given session date. |
total_actions_10min | INTEGER | Based on a 10 minute cutoff for interaction sessions, the total number of actions in interaction sessions for the person in the course offering for the given session date. |
avg_time_seconds_10min | FLOAT | Based on a 10 minute cutoff for interaction sessions, the average time spent in seconds in interaction sessions for the person in the course offering for the given session date. |
avg_actions_10min | FLOAT | Based on a 10 minute cutoff for interaction sessions, the average number of actions in interaction sessions for the person in the course offering for the given session date. |
num_sessions_20min | INTEGER | Based on a 20 minute cutoff for interaction sessions, the number of interaction sessions for the person in the Course offering for the given session date. |
total_time_seconds_20min | INTEGER | Based on a 20 minute cutoff for interaction sessions, the total time spent in seconds in interaction sessions for the person in the course offering for the given session date. |
total_actions_20min | INTEGER | Based on a 20 minute cutoff for interaction sessions, the total number of actions in interaction sessions for the person in the course offering for the given session date. |
avg_time_seconds_20min | FLOAT | Based on a 20 minute cutoff for interaction sessions, the average time spent in seconds in interaction sessions for the person in the course offering for the given session date. |
avg_actions_20min | FLOAT | Based on a 20 minute cutoff for interaction sessions, the average number of actions in interaction sessions for the person in the course offering for the given session date. |
num_sessions_30min | INTEGER | Based on a 30 minute cutoff for interaction sessions, the number of interaction sessions for the person in the Course offering for the given session date. |
total_time_seconds_30min | INTEGER | Based on a 30 minute cutoff for interaction sessions, the total time spent in seconds in interaction sessions for the person in the course offering for the given session date. |
total_actions_30min | INTEGER | Based on a 30 minute cutoff for interaction sessions, the total number of actions in interaction sessions for the person in the course offering for the given session date. |
avg_time_seconds_30min | FLOAT | Based on a 30 minute cutoff for interaction sessions, the average time spent in seconds in interaction sessions for the person in the course offering for the given session date. |
avg_actions_30min | FLOAT | Based on a 30 minute cutoff for interaction sessions, the average number of actions in interaction sessions for the person in the course offering for the given session date. |
The course section mart includes all the fields found in the course offering mart, as well as five more fields, which are presented in the table below.
Field | Type | Description |
---|---|---|
udp_course_section_id | INTEGER | The UDP ID of the Course section. |
lms_course_section_id | STRING | The LMS ID of the Course section. |
sis_course_section_id | STRING | The SIS ID of the Course section |
academic_organization_id | INTEGER | The UDP ID of the academic organization. |
organization_name | STRING | The name of the academic organization associated with the course section. Replaces academic_organization_display and academic_organization_array in the course offering mart. |
For this data mart, all events by a person in a course offering qualify as relevant to include in the generation and maintenance of the mart. Any event, associated with a specific activity (in this case the course_offering_id as relates to the student, and a specific action, as fed through the event stream) should trigger the recording to this table.
In order to compute an interaction session, it is necessary to compute the start and end times of a discrete interaction session. Or to put it differently, it’s necessary to compute when a new interaction session opens and when an open interaction session closes.
By Inactivity threshold is meant the minimum time duration that must elapse before an open interaction session is closed.
If there is no current interaction session open for course X AND the user has an activity in course X, then an interaction session begins for course X
If there is a current interaction session open in course X AND the user has an activity in course X AND the elapsed time between the last course X activity and the current X activity is greater than the Inactivity threshold, then close the previous course X interaction session and start a new course X interaction session
If there is an activity in course X and the elapsed time between the last user activity and the current user activity is greater than the Inactivity threshold, then close the interaction session
Note: another approach is to periodically see if the “last event” for all students with open interaction sessions was longer than the Inactivity threshold and, if so, close the interaction session.
Understanding which events qualify or are disqualified from interaction sessions based on the 10, 20, and 30-minute cutoffs can be confusing. The following example aims to show the logic described above in action. The exact schema of the mart(s) above is not replicated one-for-one in this example; instead, the focus is on a timeline of clicks we can see in the UDP and how those events might or might not be grouped together for interaction sessions.
Assume we have a student with the following timeline of clicks in one of their courses:
During this three-hour window (6:00 pm to 9:00 pm), we see 13 total clicks (labeled A through M). The first step is to determine the amount of time between each of these clicks. In this example, we'll keep the granularity at the minute level, but the marts we show in the UDP are at the second level.
In tabular form, the sequence of clicks looks like the following:
Click | Time | Previous Click | Duration |
---|---|---|---|
A | 6:00 PM | N/A | – |
B | 6:03 PM | 6:00PM | 3 |
C | 6:11PM | 6:03PM | 8 |
D | 6:23PM | 6:11PM | 12 |
E | 6:25PM | 6:23PM | 2 |
F | 6:47PM | 6:25PM | 22 |
G | 7:20PM | 6:47PM | 33 |
H | 7:31PM | 7:20PM | 11 |
I | 7:35PM | 7:31PM | 4 |
J | 7:54PM | 7:35PM | 19 |
K | 7:56PM | 7:54PM | 2 |
L | 8:56PM | 7:56PM | 60 |
M | 9:00PM | 8:56PM | 4 |
The first functional cutoff we can consider is 10 minutes. The timeline above will now be color-coded according to which events qualify based on a 10-minute functional cut off:
This yields the following from a 10-minute cut-off point of view:
Session Number | Clicks Included | # Clicks in Session | Total Session Time (min) |
---|---|---|---|
1 | A,B,C | 3 | 11 |
2 | D,E | 2 | 2 |
3 | H,I | 2 | 4 |
4 | J,K | 2 | 2 |
5 | L,M | 2 | 4 |
Total Clicks | Num Sessions | Total Time Interacting (min) |
---|---|---|
13 | 5 | 23 |
Similarly, let's take the same timeline of events and introduce a 20-minute cut-off instead of a 10-minute cut-off:
This yields the following from a 20-minute cut-off point of view:
Session Number | Clicks Included | # Clicks in Session | Total Session Time (min) |
---|---|---|---|
1 | A,B,C,D,E | 5 | 25 |
2 | G,H,I,J,K | 5 | 26 |
3 | L,M | 2 | 4 |
Total Clicks | Num Sessions | Total Time Interacting (min) |
---|---|---|
13 | 3 | 55 |
Finally, let's see how this timeline looks with a 30-minute cut-off:
This yields the following from a 30-minute cut-off point of view:
Session Number | Clicks Included | # Clicks in Session | Total Session Time (min) |
---|---|---|---|
1 | A,B,C,D,E,F | 6 | 47 |
2 | G,H,I,J,K | 5 | 26 |
3 | L,M | 2 | 4 |
Total Clicks | Num Sessions | Total Time Interacting (min) |
---|---|---|
13 | 3 | 77 |
Regardless of the cut-off used, the number of clicks is unchanged! There is only one stream of events, and that will never change. What does change is what time we count towards learning and interacting. The 10-minute cut-off is the most conservative in that it counts the lowest total time interacting, but you will often see a greater number of total sessions with this cut-off. The inverse is true for the 30-minute cut-off; this will be an upper bound of sorts for counting total time for a student/course; however, the number of sessions may be lower since it accepts more events into its definition of session more widely than the other cut-offs.
The cut-off time is a heuristic that can be tweaked and is not a one-size-fits-all approach. Unizin has developed these marts first with three, static cut-off windows; however, we are open to considering more dynamic approaches, and individual projects may need to define interaction sessions accordingly.