Streaks

Streaks are a powerful feature designed to motivate users by encouraging consistent improvement in their driving or riding behavior. They leverage the psychology of habit formation by rewarding users for maintaining or improving their performance over consecutive trips or time periods. There are two types of streaks in the Engagement Module:

  • Strict Streaks In a Strict Streak, users must maintain their scores above a predefined threshold to continue the streak. This threshold can apply to trip scores, or aggregated scores over a time period (usually DAY by DAY). The idea is to challenge users to consistently meet a minimum standard of safe and efficient driving or riding. If the user’s score falls below the threshold at any point, the streak ends and it will start over. This type of streak is effective for reinforcing a baseline level of behavior.

  • Self-Competing Streaks Self-Competing Streaks encourage users to compete against themselves by striving for a streak of continuously improving scores. Unlike Strict Streaks, which have only a fixed threshold, Self-Competing Streaks require the user to keep the scores above the threshold while also surpassing their previous performance with each successive trip or period. This approach taps into the motivation to achieve personal bests and fosters ongoing improvement by rewarding users for incremental progress.

Both types of streaks are designed to keep users engaged and motivated, making the pursuit of safer and more efficient driving or riding behaviour a rewarding and continuous process.

Streaks are configurable and can be evaluated either on a TRIP by TRIP basis or on a DAY by DAY basis:

  • TRIP variant will evaluate the streak state after each trip

  • DAY variant will evaluate streaks state at the end of the day using the average score of all the trips in that time frame

Examples of customisable streaks include:

  • Excellent Trips Streak (default behavior): Tracks the number of consecutive trips rated as 'Excellent' (e.g >90)

  • Excellent Days Streak: Tracks the number of consecutive days where the average score was 'Excellent' (e.g >90)

  • Good Trips Streak: Tracks the number of consecutive trips rated as 'good'

  • Action Consistency Streak: Monitors the maximum number of times a user consecutively performs a specific positive action.

GQL Definition: UserEngagementStreaks

GQL Path for current streaks: user.engagement.streaks.current.slice.name

GQL Path for best streaks: user.engagement.streaks.best.slice.name

query getStreaks($user_id: String!) {
  user(user_id: $user_id) {
    user_id
    engagement {
      streaks(transport_mode: CAR, variant: STREAK_VARIANT_DAY, type: STREAK_TYPE_STRICT) {
        
        # provides the best streaks 
	best {
	  slice {
	    name # name of the score the streak is tracking. Ex: OVERALL_SCORE, LEGAL_SCORE
	    value # value of the streak
	  }
	}
	
	# provides the current on-going streaks
	current {
	  slice {
	    name # name of the score the streak is tracking. Ex: OVERALL_SCORE, LEGAL_SCORE
	    value # value of the streak
	  }
        }
      }
    } 
  }
}
      
 

Sub Streaks

In addition to recognising overall safe driving and riding behaviour, the "Streaks" feature offers a variety of sub-streaks designed to acknowledge and promote specific aspects of user conduct.

StreaksComment

FOCUS_SCORE

Acknowledges periods of attentive driving without active phone handling

CALL_WHILE_MOVING_SCORE

Identifies instances where drivers avoid making calls while moving over a speed of 15 km/h

ATTENTION_SCORE

Acknowledges periods of attentive driving without distractions like hands free calling, handheld

calling, phone handling or screen use

LEGAL_SCORE

Rewards adherence to speed limits

MFFS_SCORE

Variation of LEGAL_SCORE that excludes congested roads

HARSH_MOVEMENT_SCORE

Recognises sequences of smooth driving, emphasising gentle acceleration and braking

SMOOTH_SCORE

Similar to HARSH_MOVEMENT_SCORE but also takes into account harsh turning events

Streaks Context

Streaks can also be enriched with a context that gives more insights into how the streak progressed towards the current state.

query getStreaks($user_id: String!) {
  user(user_id: $user_id) {
    user_id
    engagement {
      streaks(transport_mode: CAR, variant: STREAK_VARIANT_DAY, type: STREAK_TYPE_STRICT) {
        	
	# provides the current on-going streaks
	current {
	  slice {
	    name # name of the score the streak is tracking. Ex: OVERALL_SCORE, LEGAL_SCORE
	    value # value of the streak
	  }
	
  	  context {
	    scores_trend { # trend represing how your last trip influenced you average scores for the DAY
	      slice {
		key
		value {
		  trend
          	  start_datetime
          	  end_datetime
		}
	      }
	    }
	    streak_thresholds { # as defined in Streaks configuration
	      slice {
		name
		value
	      }
	    }
	    daily_avg_scores { # average scores for the past 7 days
	      slice {
		 key
		 value {
		   slice {
		     name
		     value
	     	   }
	         }
	      }
	    }
	    today_avg_scores { # today's average scores
	      slice {
		name
		value
	      }
	    }
	  }
        }
      }
    } 
  }
}

Example Wireframe


Additional helpful links:

Last updated