armgilles / vcub_keeper

Analyse de l'activité des stations Vcub dans la métropole de Bordeaux afin de détecter en amont les stations hors service
https://vcubwatcher.herokuapp.com/
MIT License
2 stars 0 forks source link

Création d'un score d'anomalie #58

Closed armgilles closed 2 years ago

armgilles commented 2 years ago

Pour l'instant il n'y a pas de score d'anomalie, soit il y a une anomalie, soit il n'y en a pas (1 ou 0).

Afin d'aider dans l'amélioration de la solution ainsi que de pouvoir aider les utilisateurs finaux dans la consommation des prédictions, il faudrait indiquer un score d'anomalie compréhensible (un peu comme les fonctions predict_proba dans Scikit-Learn).

Ce score devrait logiquement augmenter lorsque la station risque d'être en anomalie (absence d'activité de prise de vélo important + horaire particulier).

Ce score doit être lié au modèle de la station (chaque station à son propre modèle).

armgilles commented 2 years ago

How to :

# Avoir un pipeline Scikit-Learn Isolation Forest déjà fit (clf)

logistic_predict_proba_from_model(0.15, k=20)

score_anomaly = clf.decision_function(data[FEATURES_TO_USE_CLUSTER])

Différence suivant k :

image

x > 0 étant une anomalie d'après l'algorithme (et x < 0 étant un point normal). Plus 'k' est grand plus les points extrêmes dedecision_functionsont proche de0et1(eny). De la même façon unk` faible donne une fonction plus linéaire.

Ce score d'anomalie permet de mieux comprendre les résultats de la solution et est plus friendly user, il respecte aussi le % d'outlier détecter par l'algorithme :

Distribution cumulative; x étant le score d'anomalie et y la proportion. Il y a donc très peu de points >= 0.5.

image

armgilles commented 2 years ago

Ajouter de la fonctionnalité dans les tests.