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.
1. Score Range
Scores are displayed as a decimal between 0.00 and 1.00, or as a percentage where useful.
- 0.90–1.00: Highly validated / strong confidence.
- 0.70–0.89: Good / well-supported confidence.
- 0.50–0.69: Moderate / emerging confidence.
- Below 0.50: Preliminary / low confidence, often held back from full public view.
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
| Factor | Weight | Rationale |
|---|---|---|
| Observational Verification | 35% | Highest weight because direct, repeated field observation in the specific location and climate is the most relevant evidence for practical use. |
| Taxonomic and Scientific Alignment | 25% | Strong emphasis on correct identification to avoid downstream errors. |
| Ecological Performance Data | 20% | Critical for agroforestry relevance: how the plant actually behaves in the system. |
| Local and Traditional Knowledge | 10% | Respects and integrates community expertise, especially important in Sierra Leone. |
| External Corroboration | 10% | Provides broader scientific context but is given lower weight than site-specific data. |
3. How Individual Factor Scores Are Assigned
- Observational Verification: number of observations, photo documentation, seasonal coverage and observer expertise.
- Taxonomic Alignment: match with reference databases, morphology and resolution of synonyms or variants.
- Ecological Performance: survival rate, growth vigour, contribution to soil, shade, moisture or companion systems.
- Local Knowledge: quality and consistency of oral or traditional accounts cross-checked with multiple sources.
- External Corroboration: strength and relevance of literature, field guides or expert review.
4. Adjustment Mechanisms
- Data Gap Penalty: if a critical high-weight category is missing, a small deduction may apply.
- Expert Review Multiplier: senior agronomists or botanists can apply a small adjustment after manual review.
- Time Decay: older observations lose influence unless reconfirmed.
- Synergy Bonus: when multiple high-quality sources align strongly, a small positive adjustment can be applied.
5. Example Calculation
| Factor | Score | Weight | Weighted Contribution |
|---|---|---|---|
| Observational Verification | 0.96 | 0.35 | 0.336 |
| Taxonomic Alignment | 0.98 | 0.25 | 0.245 |
| Ecological Performance | 0.94 | 0.20 | 0.188 |
| Local Knowledge | 0.90 | 0.10 | 0.090 |
| External Corroboration | 0.85 | 0.10 | 0.085 |
| Total | 1.00 | 0.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
- Prevent outdated information from inflating confidence scores indefinitely.
- Encourage regular field monitoring and profile updates.
- Reflect the dynamic nature of agroecological systems.
- Maintain long-term accuracy of the Plant Intelligence Registry.
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
- Core structural data such as taxonomic identity: 730 days.
- Ecological performance and growth interactions: 365 days.
- Seasonal or environmental observations: 180 days.
- Local knowledge: 540 days.
- External literature: 1095 days.
7. How Time Decay Is Applied
- Per-observation weighting: every observation contributing to a factor receives its own decay multiplier.
- Factor-level adjustment: after decay is applied, the weighted factor score is calculated.
- Overall confidence impact: final confidence incorporates time-adjusted inputs.
- Reconfirmation reset: when a profile is re-observed or validated in the field, the age clock resets for updated data points.
8. Practical Examples
- An observation made today: Decay Factor = 1.00.
- An observation 1 year old with H=365: Decay Factor = 0.50.
- An observation 2 years old with H=365: Decay Factor ≈ 0.25.
- A 5-year-old taxonomic confirmation with H=730: Decay Factor ≈ 0.62.
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
- Profiles are re-evaluated when new observations are added.
- Expert reviewers can apply small documented adjustments.
- The methodology is reviewed annually.
- Community observations may be incorporated after verification.
- Thresholds can move a profile from Validated to Draft if evidence becomes stale.
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.