Interaction sessions

Purpose and potential use-cases

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.

BQ Prod Dataset Location

mart_course_offering

mart_course_section

Interactive Mart Dependency Diagram

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.

Schema

Mart/course_offering/interaction_sessions

FieldTypeDescription

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.

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.

Mart/Course_section/interaction_sessions

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.

FieldTypeDescription

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.

Qualifying events

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.

Metric definitions

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.

Variables

  • By Inactivity threshold is meant the minimum time duration that must elapse before an open interaction session is closed.

Criteria that open a new interaction session

  • 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

Criteria that close an open interactions 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.

Visual Example of Interaction Sessions 10, 20, & 30

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:

ClickTimePrevious ClickDuration

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 NumberClicks Included# Clicks in SessionTotal 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 ClicksNum SessionsTotal 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 NumberClicks Included# Clicks in SessionTotal 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 ClicksNum SessionsTotal 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 NumberClicks Included# Clicks in SessionTotal 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 ClicksNum SessionsTotal 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.

Last updated

Logo

Copyright © 2023, Unizin, Ltd.