Adaptive Course Plan - Kaplan Assignment Diagnostic Logic
This document explains how the adaptive course plan decides the review depth for Kaplan Assignments using diagnostic test performance and student self-efficacy ratings.
The output of this logic is a recommendation for each AAMC content category:
SHALLOW
MEDIUM
DEEP
These recommendations should later map to assignment intensity variants in the app:
SHALLOW -> assignment_intensity.SHallow / quick review
MEDIUM -> assignment_intensity.MEDIUM / balanced review
DEEP -> assignment_intensity.DEEP / intensive review
Data Sources
| Source | What it provides | Used for |
|---|---|---|
| Diagnostic Test Results | Question-level correctness from the Overall table, filtered for Test 0 |
Measures actual performance by AAMC content category |
| User Ratings | Self-efficacy score from 1 to 5 | Measures perceived confidence/knowledge |
| Skill Mapping | SIRS skill codes for each question | Separates core science misses from other missed skills |
High-Level Flow
flowchart TD A[Overall table] --> B[Filter Test 0] B --> C[Group by AAMC content category] D[User self-efficacy ratings] --> E[Get rating 1 to 5 per category] C --> F[Classify questions by SIRS skill] F --> G[Count missed science questions] F --> H[Count total correct questions] F --> I[Count total questions] G --> J[Calculate Diagnostic Performance Score] H --> J I --> J E --> K[Calculate Self-Efficacy Recommendation] J --> L[Calculate Diagnostic Performance Recommendation] E --> M[Calculate Final Integrated Score] J --> M M --> N[Final Recommendation] K --> O[Match Analysis] L --> O N --> O
Skill Classification
Each diagnostic question is classified by SIRS skill code.
| Skill group | SIRS codes | Meaning | Impact |
|---|---|---|---|
| Science Skills | SIRS1, SIRS2 |
Scientific knowledge, scientific reasoning, and problem-solving | Misses are penalized in the performance score |
| Other Skills | SIRS3, SIRS4 |
Research reasoning and data-based reasoning | Not counted as Missed Science, but correct answers still count toward Total Correct |
Science Skills
SIRS1 = Knowledge of Scientific Principles
SIRS2 = Scientific Reasoning and Problem-Solving
Other Skills
SIRS3 = Reasoning about Research
SIRS4 = Data-based Reasoning
Diagnostic Performance Score
The diagnostic performance score measures how well the student performed in a specific AAMC content category.
Inputs
| Input | Meaning |
|---|---|
Missed Science |
Number of missed questions where skill is SIRS1 or SIRS2 |
Total Correct |
Number of correct answers across all skill types |
Total Questions |
Total questions in that AAMC content category |
Formula
Modifiers
| Modifier | Value | Meaning |
|---|---|---|
| Science miss penalty | -1 |
Penalizes missing core science questions |
| Correct answer reward | 1.5 |
Rewards any correct diagnostic answer |
Interpretation
| Performance Score | Meaning |
|---|---|
<= -3.0 |
Very weak diagnostic performance; deep review likely needed |
Between -3.0 and 3.0 |
Mixed or borderline performance; medium review likely needed |
>= 3.0 |
Strong diagnostic performance; shallow review likely enough |
Final Integrated Score
The final score combines self-reported confidence with actual diagnostic performance.
Formula
Weights
| Signal | Weight | Meaning |
|---|---|---|
| User confidence rating | 0.75 |
Confidence matters, but is weaker than actual performance |
| Diagnostic performance score | 1.0 |
Test performance is the stronger signal |
Recommendation Cutoffs
The system produces three recommendations:
DEEP
MEDIUM
SHALLOW
| Recommendation Type | Input | Deep Cutoff | Shallow Cutoff | Medium Rule |
|---|---|---|---|---|
| Self-Efficacy Rec | User Rating | Rating 1-2 |
Rating 5 |
Rating 3-4 |
| Diag Perf Rec | Performance Score | <= -3.0 |
>= 3.0 |
Between -3.0 and 3.0 |
| Final Recommendation | Final Score | < 0 |
> 5 |
Between 0 and 5 inclusive |
Recommendation Decision Flow
flowchart TD
A[User Rating] --> B{Rating 1-2?}
B -->|Yes| C[Self-Efficacy Rec = DEEP]
B -->|No| D{Rating 5?}
D -->|Yes| E[Self-Efficacy Rec = SHALLOW]
D -->|No| F[Self-Efficacy Rec = MEDIUM]
G[Performance Score] --> H{Score <= -3.0?}
H -->|Yes| I[Diag Perf Rec = DEEP]
H -->|No| J{Score >= 3.0?}
J -->|Yes| K[Diag Perf Rec = SHALLOW]
J -->|No| L[Diag Perf Rec = MEDIUM]
M[Final Score] --> N{Score < 0?}
N -->|Yes| O[Final Recommendation = DEEP]
N -->|No| P{Score > 5?}
P -->|Yes| Q[Final Recommendation = SHALLOW]
P -->|No| R[Final Recommendation = MEDIUM]Match Analysis
The Match? column explains which signal drove the final recommendation.
| Match value | Meaning | Example |
|---|---|---|
Both |
Self-efficacy and diagnostic performance agree with the final recommendation | Low confidence and poor performance both produce DEEP |
Performance |
Final recommendation follows diagnostic performance more than confidence | Student feels confident, but performs poorly, so final result becomes DEEP |
Confidence |
Final recommendation follows self-rating more than diagnostic performance | Student performs borderline, but reports very low confidence, so final result trends deeper |
Suggested implementation rule:
if final_rec == self_efficacy_rec and final_rec == diag_perf_rec:
match = "Both"
elif final_rec == diag_perf_rec:
match = "Performance"
elif final_rec == self_efficacy_rec:
match = "Confidence"
else:
match = "Integrated / Mixed"
The Integrated / Mixed fallback is useful when the final weighted score creates a result that does not exactly match either individual recommendation.
Worked Examples
Example 1: True Deep
Low performance and low confidence.
| Field | Value |
|---|---|
| User Rating | 1 |
| Total Questions | 2 |
| Missed Science | 2 |
| Total Correct | 0 |
Performance calculation:
Final score:
Result:
| Recommendation | Value |
|---|---|
| Self-Efficacy Rec | DEEP |
| Diag Perf Rec | DEEP |
| Final Recommendation | DEEP |
| Match | Both |
Interpretation:
The student feels weak and the diagnostic confirms a major gap. Intensive review is required.
Example 2: Overconfident
High confidence but low performance.
| Field | Value |
|---|---|
| User Rating | 4 |
| Total Questions | 2 |
| Missed Science | 2 |
| Total Correct | 0 |
Performance calculation:
Final score:
Result:
| Recommendation | Value |
|---|---|
| Self-Efficacy Rec | MEDIUM |
| Diag Perf Rec | DEEP |
| Final Recommendation | DEEP |
| Match | Performance |
Interpretation:
The student feels reasonably confident, but performance is poor. The system trusts diagnostic evidence and assigns deep review.
Example 3: True Shallow
High performance and high confidence.
| Field | Value |
|---|---|
| User Rating | 4 |
| Total Questions | 5 |
| Missed Science | 0 |
| Total Correct | 4 |
Performance calculation:
Final score:
Result:
| Recommendation | Value |
|---|---|
| Self-Efficacy Rec | MEDIUM |
| Diag Perf Rec | SHALLOW |
| Final Recommendation | SHALLOW |
| Match | Performance |
Interpretation:
The student performed strongly and had solid confidence. Only light review is needed.
Pseudocode
SCIENCE_SKILLS = {"SIRS1", "SIRS2"}
CONFIDENCE_WEIGHT = 0.75
PERFORMANCE_WEIGHT = 1.0
SCIENCE_MISS_MODIFIER = -1
CORRECT_MODIFIER = 1.5
def self_efficacy_rec(user_rating: int) -> str:
if user_rating <= 2:
return "DEEP"
if user_rating == 5:
return "SHALLOW"
return "MEDIUM"
def diagnostic_performance_rec(performance_score: float) -> str:
if performance_score <= -3.0:
return "DEEP"
if performance_score >= 3.0:
return "SHALLOW"
return "MEDIUM"
def final_rec(final_score: float) -> str:
if final_score < 0:
return "DEEP"
if final_score > 5:
return "SHALLOW"
return "MEDIUM"
def calculate_performance_score(total_questions, missed_science, total_correct):
if total_questions == 0:
return None
raw = (missed_science * SCIENCE_MISS_MODIFIER) + (total_correct * CORRECT_MODIFIER)
return (raw / total_questions) * 5
def calculate_final_score(user_rating, performance_score):
return (user_rating * CONFIDENCE_WEIGHT) + (performance_score * PERFORMANCE_WEIGHT)
def match_driver(final, self_eff, diag):
if final == self_eff and final == diag:
return "Both"
if final == diag:
return "Performance"
if final == self_eff:
return "Confidence"
return "Integrated / Mixed"
Implementation Notes for Helica
Backend Mapping
Current backend concepts likely map like this:
| Calculation concept | Backend source |
|---|---|
| Diagnostic test results | DiagnosticResponse joined with PracticeQuestion and PracticeTest |
| Test 0 filter | Diagnostic test or imported Overall table equivalent |
| AAMC content category | PracticeQuestion.CC, PracticeQuestion.aamc_code, or related course mapping |
| SIRS skill code | PracticeQuestion.skill |
| Kaplan chapter | PracticeQuestion.kaplan_chapter or Subtopic.kaplan_chapter |
| User rating | OnboardingSurveyAnswer.value from self-efficacy questions |
| Assignment selected | Assignment matched by subject/category/chapter |
| Intensity selected | DepthIntensity.intensity via final recommendation |
Study Plan Output
For each content category/chapter, the planner should produce something like:
category: "Physics - Kinematics"
user_rating: 1
performance_score: -5.0
final_score: -4.25
recommendation: DEEP
match_driver: Both
assignment_id: 42
intensity: DEEP
Then scheduled study-plan items should reference the assignment rather than duplicate it:
studyplan.assignment_id = 42
studyplan.intensity = DEEP
The current studyplan table does not yet have an intensity field, so this is a recommended addition for adaptive planning.
Visual Summary
flowchart LR
A[Diagnostic correctness] --> D[Performance Score]
B[SIRS skill type] --> D
C[User confidence rating] --> E[Final Integrated Score]
D --> E
E --> F{Cutoff}
F -->|Score < 0| G[DEEP]
F -->|0 to 5| H[MEDIUM]
F -->|Score > 5| I[SHALLOW]
G --> J[Choose DEEP assignment intensity]
H --> K[Choose MEDIUM assignment intensity]
I --> L[Choose SHALLOW assignment intensity]Key Takeaway
The Kaplan assignment recommendation is not based only on whether a student missed questions. It combines:
- What the student actually got right or wrong.
- Whether the missed questions were core science skills.
- How confident the student said they felt.
- A weighted final score that determines review depth.
The diagnostic performance signal is intentionally stronger than self-confidence, so the system can catch overconfidence and assign deeper review when test results show real gaps.