Teer Quant: is my model better than random?
An 18-month build log. Five rebuilds. One breakthrough.
First, the game.
Teer is a 200-year-old archery lottery in Meghalaya, India. Each day, two rounds are played — R1 and R2. The result is a two-digit number, 00 to 99. That's 100 possible outcomes per round. Random chance gives you a 1% hit rate. The entire modelling problem is: can you do better than that?
My first model was worse than a coin flip.
After 18 months of walk-forward testing on version 6.0:
AN EXPENSIVE RANDOM NUMBER GENERATOR
I was measuring the wrong things.
v6.0 used 6 features. 3 carried signal — the others just added noise.
HALF THE FEATURES WERE DEAD WEIGHT
Fix #1 — surgery: delete what doesn't work.
Killed 3 dead features. Redistributed weight into the only three that actually predicted:
LESS IS MORE. NOISE BURNS CAPITAL.
Fix #2 — learn when not to play.
Some clubs are statistically unpredictable. I built a veto list and stopped betting them.
DON'T PLAY: Jaiaw (3.1%), Kynthuplang (3.6%), Rangbiria (6.7%), Malki (veto) DO PLAY: Laitumkhrah (16.7%), Senglang (10.7%), Combined 12 (9.9%), Laitkor (9.7%)
Fix #3 — don't pick a single number. Pick a neighborhood.
Old approach: top-5 standalone digits. New approach: top-4 nodes, each expanded ±1. Primary: 27 45 63 84 ±1 Neighbors: 26 28 44 46 62 64 83 37.5% of misses landed within ±2. Proof the signal was real — just not precise enough to spike.
Five iterations. Every number moved the right direction.
+3.3 POINTS ABOVE RANDOM. In a 100-digit game, that's a real edge.
2026 became the first profitable year.
What it taught me about every model.
Measure against random.
If you can't beat a coin flip, your features are noise.
Know when not to predict.
A veto list beats a smarter algorithm.
Spread, don't spike.
Neighborhoods beat point predictions when signal is weak.