Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Dockerfile.prod
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ RUN az storage blob download-batch \
--source mlruns \
--destination /app/mlruns/ || echo "No mlruns/ in storage yet, skipping"
EXPOSE 8000 8501

COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
CMD ["/entrypoint.sh"]
CMD ["/bin/bash", "/entrypoint.sh"]
Binary file modified mlflow.db
Binary file not shown.
82 changes: 41 additions & 41 deletions models/artifacts/backtest_results.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,85 +2,85 @@
"logistic_regression": {
"model_name": "logistic_regression",
"initial_capital": 500000.0,
"final_capital": 493204.1575020498,
"total_trades": 136738,
"final_capital": 492705.5220935263,
"total_trades": 136657,
"metrics": {
"total_return_pct": -0.7007231456740204,
"sharpe_ratio": 0.009860509042075846,
"win_rate": 0.49995612046395294,
"profit_factor": 0.9927246230177307
"total_return_pct": -0.8011159236488097,
"sharpe_ratio": 0.0027096238618928097,
"win_rate": 0.49990121252478836,
"profit_factor": 0.9921891798679353
}
},
"decision_tree": {
"model_name": "decision_tree",
"initial_capital": 500000.0,
"final_capital": 578881.831804675,
"total_trades": 131809,
"final_capital": 535574.7952353342,
"total_trades": 139347,
"metrics": {
"total_return_pct": 15.009130022201145,
"sharpe_ratio": 1.106539644244743,
"win_rate": 0.5029929670963288,
"profit_factor": 1.0827461283809072
"total_return_pct": 6.638419192753875,
"sharpe_ratio": 0.4680495126617511,
"win_rate": 0.5132295636073974,
"profit_factor": 1.0388947831273074
}
},
"adaboost": {
"model_name": "adaboost",
"initial_capital": 500000.0,
"final_capital": 527884.436830822,
"total_trades": 138862,
"final_capital": 497490.2428801132,
"total_trades": 139963,
"metrics": {
"total_return_pct": 6.16692067536555,
"sharpe_ratio": 0.5479899310298146,
"win_rate": 0.5121199464216273,
"profit_factor": 1.0302239065896193
"total_return_pct": -0.12140197236132355,
"sharpe_ratio": 0.03631951202318103,
"win_rate": 0.5066767645734944,
"profit_factor": 0.9972326441488291
}
},
"random_forest": {
"model_name": "random_forest",
"initial_capital": 500000.0,
"final_capital": 535141.0293030565,
"total_trades": 137898,
"final_capital": 567910.5106008762,
"total_trades": 137675,
"metrics": {
"total_return_pct": 6.959293080633122,
"sharpe_ratio": 0.5176854615114458,
"win_rate": 0.5085715528869165,
"profit_factor": 1.0360523930337522
"total_return_pct": 14.323199716288414,
"sharpe_ratio": 1.029771534052213,
"win_rate": 0.5054512438714364,
"profit_factor": 1.06602984774183
}
},
"lightgbm": {
"model_name": "lightgbm",
"initial_capital": 500000.0,
"final_capital": 502976.41332192585,
"total_trades": 133002,
"final_capital": 504583.0645151714,
"total_trades": 133377,
"metrics": {
"total_return_pct": 1.2614237556337615,
"sharpe_ratio": 0.14759871549408887,
"win_rate": 0.49972932737853565,
"profit_factor": 1.0030046186448662
"total_return_pct": 1.6038144528949472,
"sharpe_ratio": 0.17137856645149313,
"win_rate": 0.5027628451682075,
"profit_factor": 1.0046778475452267
}
},
"voting_classifier": {
"model_name": "voting_classifier",
"initial_capital": 500000.0,
"final_capital": 511678.2427597648,
"total_trades": 135828,
"final_capital": 508977.30249215994,
"total_trades": 136029,
"metrics": {
"total_return_pct": 3.0150256782757623,
"sharpe_ratio": 0.2756268746125455,
"win_rate": 0.5035338810849015,
"profit_factor": 1.0119298707075866
"total_return_pct": 2.4780097080419727,
"sharpe_ratio": 0.24514815714230245,
"win_rate": 0.5021943850208411,
"profit_factor": 1.0091277291482916
}
},
"naive_buy_baseline": {
"model_name": "naive_buy_baseline",
"initial_capital": 500000.0,
"final_capital": 583926.7224497921,
"final_capital": 583902.3325100574,
"total_trades": 151524,
"metrics": {
"total_return_pct": 17.606993973683593,
"sharpe_ratio": 0.9842788949006163,
"win_rate": 0.5174163828832397,
"profit_factor": 1.0829189840007805
"total_return_pct": 17.602081666393786,
"sharpe_ratio": 0.9840903604306787,
"win_rate": 0.5174097832686572,
"profit_factor": 1.0828999784672162
}
}
}
12 changes: 6 additions & 6 deletions models/artifacts/best_model.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"model_name": "lightgbm",
"model_path": "models/lightgbm.pkl",
"test_f1_macro": 0.0,
"test_accuracy": 0.0,
"test_precision_macro": 0.0,
"test_recall_macro": 0.0,
"test_mcc": 0.1183,
"selected_at": "2026-05-04T15:21:09.345798+00:00Z"
"test_f1_macro": 0.4073584602583696,
"test_accuracy": 0.417024663986895,
"test_precision_macro": 0.43576849537949297,
"test_recall_macro": 0.417024663986895,
"test_mcc": 0.10451422641901091,
"selected_at": "2026-05-04T21:13:44.737894+00:00Z"
}
6 changes: 3 additions & 3 deletions models/artifacts/confusion_matrix_adaboost.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
,Pred Hold,Pred Buy,Pred Sell
Hold,46820,3038,12092
Buy,28556,5761,5404
Sell,37832,2923,9577
Hold,45241,3032,13678
Buy,28304,5669,5747
Sell,36772,2938,10622
6 changes: 3 additions & 3 deletions models/artifacts/confusion_matrix_decision_tree.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
,Pred Hold,Pred Buy,Pred Sell
Hold,34039,5565,22346
Buy,21613,7929,10179
Sell,26686,5034,18612
Hold,33257,3765,24929
Buy,21340,5300,13080
Sell,26159,3149,21024
6 changes: 3 additions & 3 deletions models/artifacts/confusion_matrix_lightgbm.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
,Pred Hold,Pred Buy,Pred Sell
Hold,27783,5582,28585
Buy,13376,9794,16551
Sell,19146,3892,27294
Hold,26473,5541,29937
Buy,13067,8926,17727
Sell,18492,3850,27990
6 changes: 3 additions & 3 deletions models/artifacts/confusion_matrix_logistic_regression.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
,Pred Hold,Pred Buy,Pred Sell
Hold,29952,4493,27505
Buy,17248,8002,14471
Sell,23531,2611,24190
Hold,37905,4572,19474
Buy,22756,7745,9219
Sell,30309,2657,17366
6 changes: 3 additions & 3 deletions models/artifacts/confusion_matrix_random_forest.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
,Pred Hold,Pred Buy,Pred Sell
Hold,39225,4054,18671
Buy,21213,7325,11183
Sell,29766,2836,17730
Hold,34209,4077,23665
Buy,17679,7300,14741
Sell,24995,2680,22657
6 changes: 3 additions & 3 deletions models/artifacts/confusion_matrix_voting_classifier.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
,Pred Hold,Pred Buy,Pred Sell
Hold,31878,4486,25586
Buy,16279,8415,15027
Sell,22826,3114,24392
Hold,29621,4591,27739
Buy,14984,7937,16799
Sell,20986,3146,26200
14 changes: 7 additions & 7 deletions models/artifacts/model_comparison.csv
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
model,train_accuracy,test_accuracy,cv_accuracy,overfit_gap,train_time_s
logistic_regression,0.4483937946341601,0.40883014697175035,0.3877766233304916,0.03956364766240977,1360.18
decision_tree,0.4823761149694377,0.39855396639517904,0.3804392227905655,0.08382214857425868,13.56
adaboost,0.4685643972379895,0.4089551453270352,0.3916595623756749,0.059609251910954286,4792.6
random_forest,0.5800421927579644,0.4231457480822621,0.39460562304631996,0.15689644467570235,683.38
lightgbm,0.6146572379561654,0.42779042381021304,0.4080615942028986,0.1868668141459524,479.19
voting_classifier,0.6056908606223682,0.4261654451915106,,0.1795254154308576,1994.97
Model,Train Acc,Test Acc,Overfit Gap,Weighted F1,MCC,Signal Precision (B),Hold Recall (B)
logistic_regression,0.4393,0.4146,0.0248,0.3954,0.0749,0.4471,0.6119
decision_tree,0.4798,0.392,0.0878,0.3706,0.0426,0.395,0.5368
adaboost,0.4664,0.4048,0.0616,0.3593,0.0444,0.4203,0.7303
random_forest,0.5792,0.4221,0.157,0.4065,0.0958,0.4452,0.5522
lightgbm,0.5989,0.417,0.1818,0.4074,0.1045,0.4286,0.4273
voting_classifier,0.5931,0.4195,0.1736,0.4075,0.1008,0.4384,0.4781
48 changes: 24 additions & 24 deletions models/artifacts/training_results.json
Original file line number Diff line number Diff line change
@@ -1,37 +1,37 @@
{
"generated_at": "2026-05-03T16:58:59.199060+00:00",
"generated_at": "2026-05-04T21:02:49.210784+00:00",
"models": {
"logistic_regression": {
"best_params": {
"C": 0.1,
"l1_ratio": 0.1
},
"cv_accuracy": 0.3877766233304916,
"train_accuracy": 0.4483937946341601,
"test_accuracy": 0.40883014697175035,
"train_time_s": 1360.18,
"cv_accuracy": 0.3884759519749929,
"train_accuracy": 0.43933157502131287,
"test_accuracy": 0.4145707650506898,
"train_time_s": 97.81,
"artifact_path": "models/logistic_regression.pkl"
},
"decision_tree": {
"best_params": {
"max_depth": 8,
"min_samples_leaf": 200
},
"cv_accuracy": 0.3804392227905655,
"train_accuracy": 0.4823761149694377,
"test_accuracy": 0.39855396639517904,
"train_time_s": 13.56,
"cv_accuracy": 0.4016943734015345,
"train_accuracy": 0.4797877371057119,
"test_accuracy": 0.39197252685802253,
"train_time_s": 3.23,
"artifact_path": "models/decision_tree.pkl"
},
"adaboost": {
"best_params": {
"learning_rate": 0.1,
"n_estimators": 200
},
"cv_accuracy": 0.3916595623756749,
"train_accuracy": 0.4685643972379895,
"test_accuracy": 0.4089551453270352,
"train_time_s": 4792.6,
"cv_accuracy": 0.39465668513782326,
"train_accuracy": 0.4663806079497016,
"test_accuracy": 0.4048077998460557,
"train_time_s": 754.96,
"artifact_path": "models/adaboost.pkl"
},
"random_forest": {
Expand All @@ -40,10 +40,10 @@
"max_samples": 0.7,
"min_samples_leaf": 100
},
"cv_accuracy": 0.39460562304631996,
"train_accuracy": 0.5800421927579644,
"test_accuracy": 0.4231457480822621,
"train_time_s": 683.38,
"cv_accuracy": 0.3956046639670361,
"train_accuracy": 0.5791756580349531,
"test_accuracy": 0.4221364052025289,
"train_time_s": 204.96,
"artifact_path": "models/random_forest.pkl"
},
"lightgbm": {
Expand All @@ -54,10 +54,10 @@
"num_leaves": 48,
"reg_lambda": 1.0
},
"cv_accuracy": 0.4080615942028986,
"train_accuracy": 0.6146572379561654,
"test_accuracy": 0.42779042381021304,
"train_time_s": 479.19,
"cv_accuracy": 0.3952450092355783,
"train_accuracy": 0.5988517689684569,
"test_accuracy": 0.417024663986895,
"train_time_s": 1833.6,
"artifact_path": "models/lightgbm.pkl"
},
"voting_classifier": {
Expand All @@ -70,9 +70,9 @@
"voting": "soft"
},
"cv_accuracy": null,
"train_accuracy": 0.6056908606223682,
"test_accuracy": 0.4261654451915106,
"train_time_s": 1994.97,
"train_accuracy": 0.5930540014919011,
"test_accuracy": 0.41945224765300687,
"train_time_s": 469.87,
"artifact_path": "models/voting_classifier.pkl"
}
}
Expand Down
Loading