CoolFace
Apppublic

Gambling/XG

sourceHugging Faceupdated 3y agoView on Hugging Face
0likes
model.py101 linesDownload Raw Back to model
1import pandas as pd2from sklearn.ensemble import GradientBoostingClassifier3from sklearn.metrics import (4    average_precision_score,5    roc_auc_score,6    f1_score,7    precision_score,8    recall_score,9    cohen_kappa_score,10    classification_report,11    confusion_matrix12)13from hyperopt import (14    hp,15    Trials,16    STATUS_OK,17    fmin,18    tpe19)20from data.const import Color21 22 23class ModelOptimizer:24    def __init__(self, X_train, y_train, X_test, y_test):25        self.X_train = X_train26        self.y_train = y_train27        self.X_test = X_test28        self.y_test = y_test29        self.hyperparameter_space = {30            'learning_rate': hp.uniform('learning_rate', 0.05, 0.3),31            'min_samples_leaf': hp.choice('min_samples_leaf', range(15, 200)),32            'max_depth': hp.choice('max_depth', range(2, 20)),33            'max_features': hp.choice('max_features', range(3, 27))34        }35        self.trials = Trials()36    37    def evaluate_model(self, params):38        model = GradientBoostingClassifier(39                    learning_rate=params['learning_rate'],40                    min_samples_leaf=params['min_samples_leaf'],41                    max_depth = params['max_depth'],42                    max_features = params['max_features']43                    )44        model.fit(self.X_train, self.y_train)45        return {46            'learning_rate': params['learning_rate'],47            'min_samples_leaf': params['min_samples_leaf'],48            'max_depth': params['max_depth'],49            'max_features': params['max_features'],50            'train_ROCAUC': roc_auc_score(self.y_train, model.predict_proba(self.X_train)[:, 1]),51            'test_ROCAUC': roc_auc_score(self.y_test, model.predict_proba(self.X_test)[:, 1]),52            'recall': recall_score(self.y_test, model.predict(self.X_test)),53            'precision': precision_score(self.y_test, model.predict(self.X_test)),54            'f1_score': f1_score(self.y_test, model.predict(self.X_test)),55            'train_accuracy': model.score(self.X_train, self.y_train),56            'test_accuracy': model.score(self.X_test, self.y_test),57        }58    59    def objective(self, params):60        res = self.evaluate_model(params)61        res['loss'] = - res['test_ROCAUC']62        res['status'] = STATUS_OK63        return res 64 65    def fmin(self, max_evals):66        fmin(67            self.objective,68            space=self.hyperparameter_space,69            algo=tpe.suggest,70            max_evals=max_evals,71            trials=self.trials72            )73    74    def get_best_score(self, metric='f1_score', ascending=False):75        best_score = pd.DataFrame(self.trials.results).sort_values(by=metric, ascending=ascending).head(5)76        print(best_score)77        return best_score78    79    def choice_best_params(self, best_score):80        model = GradientBoostingClassifier(81                        learning_rate=best_score['learning_rate'][0],82                        min_samples_leaf=best_score['min_samples_leaf'][0],83                        max_depth = best_score['max_depth'][0],84                        max_features = best_score['max_features'][0]85                        )86        model.fit(self.X_train, self.y_train)87        return model88    89    def evaluate_metrics(self, model):90        print('Le jeu de test contient {} examples de tir et {} sont des buts.'.format(len(self.y_test), self.y_test.sum()))91        print('Le model obtien une ROC-AUC de {}%'.format(round(roc_auc_score(self.y_test, model.predict_proba(self.X_test)[:, 1])*100),2))92        print('La performance de base pour PR-AUC est de {}%.'.format(round(self.y_train.mean(),2)))93        print('Le modele obtien une PR-AUC de {}%.'.format(round(average_precision_score(self.y_test, model.predict_proba(self.X_test)[:, 1])*100,2)))94        print('Le modele obtien un Cohen Kappa de {}.'.format(round(cohen_kappa_score(self.y_test,model.predict(self.X_test)),2)))95        print(Color.BOLD + Color.YELLOW + 'Matrice de confusion:\n' + Color.END)96        print(confusion_matrix(self.y_test,model.predict(self.X_test)))97        print(Color.BOLD +  Color.YELLOW + '\n Rapport de classification:' + Color.END)98        print(classification_report(self.y_test,model.predict(self.X_test)))99        print('\n Probabilités xGoal:', model.predict_proba(self.X_test))100    101