BizzleBot 4647c596b3 feat: ML-optimized accumulation scoring with dashboard toggle
Train GradientBoostedClassifier on 2,601 days of historical data
(2018-2025) to find optimal metric weights for identifying the best
long-term buying opportunities. Uses time-series cross-validation
to prevent look-ahead bias.

Key results:
- pct_above_200w_sma: 50.7% weight (was 11.1% equal)
- drawdown: 14.6%, lth_rp: 10.9%, rhodl: 8.9%
- fear_greed demoted from 11.1% to 5.1%
- nupl/mvrv nearly eliminated (0.7-1.8%)

ML Strong Accumulation bracket: avg +210% 1yr (vs +176% classic)

New files: ml/optimizer.py, config/ml_weights.json
Modified: scoring/engine.py (score_all_ml), backtesting/engine.py
(ml_mode), dashboard/server.py (Classic/ML toggle)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-21 23:18:29 +00:00

159 lines
3.8 KiB
JSON

{
"weights": {
"pct_above_200w_sma": 0.5075,
"drawdown": 0.1459,
"pct_above_lth_rp": 0.1095,
"rhodl_ratio": 0.089,
"fear_greed": 0.0515,
"reserve_risk": 0.046,
"puell_multiple": 0.0255,
"mvrv_zscore": 0.0182,
"nupl": 0.0068
},
"feature_importances": {
"raw_pct_above_200w_sma": 0.436377,
"days_since_ath": 0.119405,
"raw_pct_above_lth_rp": 0.109451,
"raw_rhodl_ratio": 0.088999,
"score_pct_above_200w_sma": 0.071148,
"raw_fear_greed": 0.051475,
"puell_x_reserve": 0.032886,
"raw_drawdown": 0.026474,
"raw_reserve_risk": 0.021707,
"raw_mvrv_zscore": 0.012429,
"raw_puell_multiple": 0.008599,
"delta_30d_reserve_risk": 0.007865,
"delta_30d_mvrv_zscore": 0.004263,
"raw_nupl": 0.003271,
"mvrv_x_nupl": 0.002979,
"delta_30d_nupl": 0.002056,
"delta_30d_puell_multiple": 0.000473,
"score_fear_greed": 6.8e-05,
"score_mvrv_zscore": 5.4e-05,
"score_puell_multiple": 1e-05,
"score_pct_above_lth_rp": 6e-06,
"score_rhodl_ratio": 2e-06,
"score_reserve_risk": 0.0,
"score_nupl": 0.0,
"score_drawdown": 0.0
},
"cv_results": {
"mean_auc": 0.6164,
"std_auc": 0.3317,
"mean_f1": 0.6736,
"mean_precision": 0.8015,
"mean_recall": 0.7047
},
"training_info": {
"n_samples": 2601,
"n_positive": 1553,
"positive_rate": 0.5971,
"n_features": 25,
"target_threshold": 30.0,
"date_range": "2018-02-01 to 2025-03-21",
"model": "GradientBoostingClassifier"
},
"comparison": {
"equal_weight": [
{
"range": "0-20",
"label": "Extreme Caution",
"days": 295,
"avg_365d": -5.94,
"median_365d": -11.99,
"win_rate_365d": 35.6
},
{
"range": "21-40",
"label": "Caution",
"days": 587,
"avg_365d": 23.84,
"median_365d": -7.2,
"win_rate_365d": 45.3
},
{
"range": "41-55",
"label": "Neutral",
"days": 697,
"avg_365d": 108.96,
"median_365d": 75.92,
"win_rate_365d": 70.4
},
{
"range": "56-70",
"label": "Moderate Opportunity",
"days": 450,
"avg_365d": 128.81,
"median_365d": 109.03,
"win_rate_365d": 96.4
},
{
"range": "71-85",
"label": "Strong Accumulation",
"days": 275,
"avg_365d": 175.76,
"median_365d": 117.95,
"win_rate_365d": 86.9
},
{
"range": "86-100",
"label": "Extreme Accumulation",
"days": 247,
"avg_365d": 115.5,
"median_365d": 90.08,
"win_rate_365d": 100.0
}
],
"ml_weighted": [
{
"range": "0-20",
"label": "Extreme Caution",
"days": 577,
"avg_365d": -6.17,
"median_365d": -26.21,
"win_rate_365d": 27.0
},
{
"range": "21-40",
"label": "Caution",
"days": 855,
"avg_365d": 77.5,
"median_365d": 39.28,
"win_rate_365d": 72.7
},
{
"range": "41-55",
"label": "Neutral",
"days": 241,
"avg_365d": 165.77,
"median_365d": 124.05,
"win_rate_365d": 92.5
},
{
"range": "56-70",
"label": "Moderate Opportunity",
"days": 328,
"avg_365d": 144.47,
"median_365d": 124.27,
"win_rate_365d": 89.6
},
{
"range": "71-85",
"label": "Strong Accumulation",
"days": 201,
"avg_365d": 210.2,
"median_365d": 122.22,
"win_rate_365d": 99.0
},
{
"range": "86-100",
"label": "Extreme Accumulation",
"days": 287,
"avg_365d": 113.92,
"median_365d": 99.53,
"win_rate_365d": 100.0
}
]
},
"trained_at": "2026-03-21T23:15:38.277703+00:00"
}