Skip to content

check-retraining-needed

Evaluates whether a model requires retraining based on drift detection, scheduled intervals, or manual triggers.

Overview

Property Value
Trigger Step Functions state machine
Runtime Python 3.11
Timeout 60 seconds
Memory 256 MB

Input Schema

{
    "model_name": "PascalStrategy",  # Required
    "force": false,                   # Optional, forces retraining
    "manual_trigger": false           # Optional, marks as manual request
}

Output Schema

{
    "model_name": "PascalStrategy",
    "decision": "NEEDS_RETRAINING",  # NEEDS_RETRAINING | RECENTLY_TRAINED | NO_RETRAINING
    "trigger": "DRIFT_DETECTED",     # MANUAL | DRIFT_DETECTED | SCHEDULED
    "reason": "Significant drift detected (PSI: 0.35)",
    "hours_since_retrain": 168.5,
    "days_since_retrain": 7,
    "drift_severity": "SIGNIFICANT",
    "drift_psi": 0.35
}

Environment Variables

Variable Required Default Description
DYNAMODB_TABLE_NAME Yes - State repository table
DRIFT_STATE_TABLE No "tradai-drift-state" Drift state table
RETRAINING_STATE_TABLE No "tradai-retraining-state" Retraining state table
RETRAINING_INTERVAL_DAYS No 7 Days between scheduled retraining
MIN_HOURS_BETWEEN_RETRAINING No 24 Minimum hours between attempts

Decision Logic

flowchart TD
    A[Start] --> B{Force flag?}
    B -->|Yes| C[NEEDS_RETRAINING: MANUAL]
    B -->|No| D{Check drift state}
    D -->|Significant drift| E[NEEDS_RETRAINING: DRIFT_DETECTED]
    D -->|No drift| F{Days since last?}
    F -->|>= interval| G{Hours since last?}
    G -->|>= minimum| H[NEEDS_RETRAINING: SCHEDULED]
    G -->|< minimum| I[RECENTLY_TRAINED]
    F -->|< interval| J[NO_RETRAINING]

Key Features

  • Checks drift severity against thresholds
  • Validates minimum interval between retraining attempts
  • Supports forced retraining and manual triggers
  • Returns decision rationale for audit trail

Step Functions Integration

{
  "CheckRetraining": {
    "Type": "Task",
    "Resource": "arn:aws:lambda:...:check-retraining-needed",
    "Parameters": {
      "model_name.$": "$.model_name",
      "force.$": "$.force"
    },
    "Next": "EvaluateDecision"
  },
  "EvaluateDecision": {
    "Type": "Choice",
    "Choices": [
      {
        "Variable": "$.decision",
        "StringEquals": "NEEDS_RETRAINING",
        "Next": "TriggerRetraining"
      }
    ],
    "Default": "SkipRetraining"
  }
}