Back to Methodology

TT-OS Confidence Scoring and Time Decay

Confidence scores in the TT-OS Plant Intelligence system provide a transparent measure of how reliable and well-supported each plant profile is. They help users quickly understand the strength of the data behind every passport.

Confidence scoring supports evidence interpretation. It does not create absolute certainty. Scores are provisional and should be updated when new field observations, taxonomic checks, soil results or external references become available.

1. Score Range

Scores are displayed as a decimal between 0.00 and 1.00, or as a percentage where useful.

2. Weighting Algorithm in TT-OS Plant Intelligence

The confidence score is not a simple average. It uses a weighted multi-criteria algorithm designed to prioritise the most reliable and contextually relevant sources of evidence for agroecological systems.

Confidence Score = sum(w_i * s_i)

where:
w_i = weight of factor i
s_i = normalised score between 0.0 and 1.0
weights sum to 1.0
FactorWeightRationale
Observational Verification35%Highest weight because direct, repeated field observation in the specific location and climate is the most relevant evidence for practical use.
Taxonomic and Scientific Alignment25%Strong emphasis on correct identification to avoid downstream errors.
Ecological Performance Data20%Critical for agroforestry relevance: how the plant actually behaves in the system.
Local and Traditional Knowledge10%Respects and integrates community expertise, especially important in Sierra Leone.
External Corroboration10%Provides broader scientific context but is given lower weight than site-specific data.

3. How Individual Factor Scores Are Assigned

4. Adjustment Mechanisms

5. Example Calculation

FactorScoreWeightWeighted Contribution
Observational Verification0.960.350.336
Taxonomic Alignment0.980.250.245
Ecological Performance0.940.200.188
Local Knowledge0.900.100.090
External Corroboration0.850.100.085
Total1.000.944 before review adjustment

6. Time Decay in TT-OS Confidence Scoring

Living systems change. New observations, climate variations, management practices or environmental shifts can make older data less representative. Time decay gently reduces the influence of older observations so that recent, relevant data carries more weight in confidence scores.

Purpose of Time Decay

Chosen Decay Model: Exponential Decay with Half-Life

TT-OS uses an exponential decay function because it provides a smooth, biologically plausible reduction in influence. It is computationally efficient while remaining interpretable.

Decay Factor = 2 ^ -(delta_t / H)

delta_t = age of the observation in days
H = half-life in days

Default Half-Life Settings

7. How Time Decay Is Applied

  1. Per-observation weighting: every observation contributing to a factor receives its own decay multiplier.
  2. Factor-level adjustment: after decay is applied, the weighted factor score is calculated.
  3. Overall confidence impact: final confidence incorporates time-adjusted inputs.
  4. Reconfirmation reset: when a profile is re-observed or validated in the field, the age clock resets for updated data points.

8. Practical Examples

9. Overall Confidence Score Pseudocode

function calculateConfidenceScore(plantProfile) {
    totalScore = 0.0

    factors = [
        {name: "observational", weight: 0.35, rawScore: getFactorScore("observational", plantProfile)},
        {name: "taxonomic", weight: 0.25, rawScore: getFactorScore("taxonomic", plantProfile)},
        {name: "ecological", weight: 0.20, rawScore: getFactorScore("ecological", plantProfile)},
        {name: "localKnowledge", weight: 0.10, rawScore: getFactorScore("localKnowledge", plantProfile)},
        {name: "external", weight: 0.10, rawScore: getFactorScore("external", plantProfile)}
    ]

    for each factor in factors {
        adjustedScore = applyTimeDecay(factor.rawScore, factor.name, plantProfile)
        totalScore += factor.weight * adjustedScore
    }

    finalScore = clamp(totalScore + expertAdjustment(plantProfile), 0.0, 1.0)
    return round(finalScore, 2)
}

10. Time Decay Function Pseudocode

function applyTimeDecay(rawScore, factorType, plantProfile) {
    if (rawScore == null) return 0.0

    halfLife = getHalfLifeForFactor(factorType)

    decayedContribution = 0.0
    totalWeight = 0.0

    for each observation in plantProfile.observations[factorType] {
        ageInDays = currentDate - observation.date

        decayFactor = pow(2, -ageInDays / halfLife)

        // Optional minimum floor for foundational data
        decayFactor = max(decayFactor, 0.15)

        decayedContribution += observation.score * decayFactor
        totalWeight += decayFactor
    }

    if (totalWeight == 0) return 0.0

    return decayedContribution / totalWeight
}

11. Half-Life Configuration Pseudocode

function getHalfLifeForFactor(factorType) {
    switch (factorType) {
        case "observational":
        case "ecological":
            return 365
        case "taxonomic":
            return 730
        case "localKnowledge":
            return 540
        case "external":
            return 1095
        default:
            return 365
    }
}

12. Plant Passport Update Pseudocode

function updatePlantPassport(plantID) {
    profile = loadProfile(plantID)

    refreshObservations(profile)

    profile.confidenceScore = calculateConfidenceScore(profile)

    if (profile.confidenceScore >= 0.85 && isWellDocumented(profile)) {
        profile.status = "Validated"
    } else if (profile.confidenceScore >= 0.60) {
        profile.status = "Draft"
    } else {
        profile.status = "Held Back"
    }

    profile.lastUpdated = currentDate
    saveProfile(profile)

    return profile
}

13. Decay Curve Helper

function generateDecayCurve(halfLife, maxDays) {
    curve = []

    for day = 0 to maxDays step 30 {
        decay = pow(2, -day / halfLife)
        curve.append({day: day, decayFactor: round(decay, 3)})
    }

    return curve
}

// Example output for H = 365 over 3 years:
// Day 0    -> 1.000
// Day 365  -> 0.500
// Day 730  -> 0.250
// Day 1095 -> 0.125

14. Continuous Improvement

Last updated: July 2026.

Plant Passport Template | Soil Health Verification Protocol

Public use caution

Public material is evidence-bounded and Founder-gated. It is not medical, legal, financial or investment advice.