backend/app/ml_models/backtesting.py
2024-05-26 22:28:08 +02:00

57 lines
2.2 KiB
Python
Executable File

from sklearn.metrics import explained_variance_score,r2_score
#from sklearn.metrics import mean_squared_error
import pandas as pd
class Backtesting:
def __init__(self, original_ytrain, train_predict, original_ytest, test_predict):
self.original_ytrain = original_ytrain
self.train_predict = train_predict
self.original_ytest = original_ytest
self.test_predict = test_predict
def run(self):
'''
Explained variance regression score:
The explained variance score explains the dispersion of errors of a given dataset,
and the formula is written as follows:
Here, and Var(y) is the variance of prediction errors and actual values respectively.
Scores close to 1.0 are highly desired, indicating better squares of standard deviations of errors.
print('Variance score:')
print("Train data explained variance regression score:", explained_variance_score(self.original_ytrain, self.train_predict))
print("Test data explained variance regression score:", explained_variance_score(self.original_ytest, self.test_predict))
print('=================')
R2 score for regression
R-squared (R2) is a statistical measure that represents the proportion of the variance
for a dependent variable that's explained by an independent variable or variables in
a regression model
1 = Best
0 or < 0 = worse
print('R2 score:')
print("Train data R2 score:", r2_score(self.original_ytrain, self.train_predict))
print("Test data R2 score:", r2_score(self.original_ytest, self.test_predict))
print('=================')
print('Mean squared error:')
print("Train data accuracy regression score:", mean_squared_error(self.original_ytrain, self.train_predict))
print("Test data accuracy regression score:", mean_squared_error(self.original_ytest, self.test_predict))
print('=================')
'''
res = pd.DataFrame(index=['metrics'])
res['train_variance_score'] = explained_variance_score(self.original_ytrain, self.train_predict)
res['test_variance_score'] = explained_variance_score(self.original_ytest, self.test_predict)
res['train_r2_score'] = r2_score(self.original_ytrain, self.train_predict)
res['test_r2_score'] = r2_score(self.original_ytest, self.test_predict)
res=res.reset_index(drop=True)
return res