<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>http://os-vps418.infomaniak.ch:1250/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mdesmet</id>
	<title>Wiki du LAMA (UMR 5127) - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="http://os-vps418.infomaniak.ch:1250/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mdesmet"/>
	<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php/Sp%C3%A9cial:Contributions/Mdesmet"/>
	<updated>2026-05-21T08:47:15Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Tutoriel_utilisation_algorithme_Isolation_Forest&amp;diff=14242</id>
		<title>Tutoriel utilisation algorithme Isolation Forest</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Tutoriel_utilisation_algorithme_Isolation_Forest&amp;diff=14242"/>
		<updated>2022-05-29T18:44:35Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra&lt;br /&gt;
comment utiliser facilement cet algorithme pour analyser votre propre base de données. Il vous&lt;br /&gt;
fournira le code nécessaire mais aussi vous expliquera quels paramètres modifier si vous souhaitez&lt;br /&gt;
modifier le code pour l’adapter à vos besoins.&lt;br /&gt;
&lt;br /&gt;
=1 ) Tutoriel=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce tutoriel correctement il faut créer un fichier .py par exemple où on copie toutes les&lt;br /&gt;
parties entre barres.&lt;br /&gt;
&lt;br /&gt;
==1 Formatage des données==&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord vous devez formater vos données afin qu&#039;elles soient compatibles avec la suite de&lt;br /&gt;
ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Pour cela créez un tableau sur excel ou autre tableur. La première colonne est l&#039;identifiant qui&lt;br /&gt;
vous permettra d&#039;identifier rapidement les anomalies qui vous seront indiquées, peut être le&lt;br /&gt;
numéro de la ligne par exemple.&lt;br /&gt;
&lt;br /&gt;
Ensuite chaque colonne dont on mettra le titre en ligne 1 contiendra les valeurs d&#039;une&lt;br /&gt;
caractéristique pour chaque élément de la base de données.&lt;br /&gt;
Finalement, enregistrez ce document sous le format cvs séparé par des virgules dans un&lt;br /&gt;
dossier de votre choix.&lt;br /&gt;
&lt;br /&gt;
==2 Import des bibliothèques==&lt;br /&gt;
&lt;br /&gt;
Vous devez maintenant créer un fichier dans le MEME dossier que celui où vous avez mis votre&lt;br /&gt;
dataset. Ce fichier est celui où nous allons écrire le programme une extension .py est donc conseillée.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de l’algorithme comme nous l’avons vu plus haut est assez complexe mais&lt;br /&gt;
heureusement des bibliothèque assez simplifiée ont étés crées ce qui va nous simplifier grandement&lt;br /&gt;
la tâche. Malheureusement ceci peut aussi nous désavantager car les seules fonctions qui sont&lt;br /&gt;
données sont très opaque et ne laisse peut de place à la compréhension du code interne et à la&lt;br /&gt;
modification de ce dernier. C’est pour cela que nous allons essayer de nous concentrer sur la&lt;br /&gt;
compréhension des arguments que nous donnons aux fonctions que nous allons utiliser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;import numpy as np&lt;br /&gt;
&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
from sklearn.ensemble import IsolationForest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous voulez trouver les anomalies en prenant en compte une seule variable de votre base de&lt;br /&gt;
données suivez la partie : &amp;quot;Recherche anomalie pour une seule variable&amp;quot;. Si vous voulez connaitre&lt;br /&gt;
les annomalies en prenant en comptes toutes les variables entrées dans votre documents csv&lt;br /&gt;
suivez la partie : &amp;quot;Recherche anomalie pour toutes les variable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==3 Recherche anomalie pour toutes les variables¶==&lt;br /&gt;
&lt;br /&gt;
Dans cette section nous prenons en compte toutes les variables entrées pour les éléments de notre&lt;br /&gt;
dataset.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
df = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
df_modif = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
model.fit(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&lt;br /&gt;
anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la première ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset.&lt;br /&gt;
&lt;br /&gt;
==3 BIS Recherche d&#039;anomalies pour une seule variable==&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez savoir qu’elles sont les valeurs anormales pour une seule variable, par exemple ne&lt;br /&gt;
prendre en compte que la variable de l&#039;âge dans une certaine population, il faut utiliser le code&lt;br /&gt;
suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
nom_variable =&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Reste du code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.fit(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;df[&#039;scores&#039;]=model.decision_function(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
df[&#039;anomaly&#039;]=model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anomaly=df.loc[df[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la première ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset. Ainsi que le titre de la colonne de la variable que&lt;br /&gt;
vous voulez prendre en compte dans nom_variable.&lt;br /&gt;
&lt;br /&gt;
==4 Utiliser les résultats==&lt;br /&gt;
&lt;br /&gt;
Lancez le programme. Ce dernier va vous afficher les valeurs dites anormales. Vous pouvez&lt;br /&gt;
ensuite agir sur ces dernières en utilisant la variable anomaly_index qui est un tableau qui&lt;br /&gt;
contient tous les indices des anomalies détectées.&lt;br /&gt;
&lt;br /&gt;
=2)Explication plus précise du code=&lt;br /&gt;
&lt;br /&gt;
Voici une explication plus précise de chaque fonction utilisée dans le code donné dans le tuto.&lt;br /&gt;
&lt;br /&gt;
==1 Récupération des données==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, si nous avons bien suivi le tutoriel fournis nous avons déjà créé un fichier CSV qui&lt;br /&gt;
rassemble nos donnés. La fonction suivante permet de stocker toutes ces informations dans une&lt;br /&gt;
variable en lisant le contenu de notre fichier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df = pd.read_csv(nom_fichier)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 2 Création du model ==&lt;br /&gt;
&lt;br /&gt;
Notre but maintenant est de définir le modèle utilisé par l’algorithme Isolation Forest ensuite. Cela&lt;br /&gt;
reviens à créer un objet contenant tous les paramètres dont la bibliothèque a besoin pour fonctionner.&lt;br /&gt;
&lt;br /&gt;
Pour cela vous allez devoir choisir des paramètres suivant vos besoins :&lt;br /&gt;
&lt;br /&gt;
===1) n_estimators===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir le nombre d&#039;estimateurs de base, c&#039;est-à-dire le nombre d&#039;arbres qui seront&lt;br /&gt;
construits dans la forêt.&lt;br /&gt;
&lt;br /&gt;
Plus le nombre d’arbre est élevé plus l’algorithme est fiable car les moyennes souffrirons moins des&lt;br /&gt;
valeurs écartées mais ces calculs prennent du temps et son couteux en opération c’est pour cela qu’un nombre trop&lt;br /&gt;
élevé d’arbre serait du « gâchis » car la plupart du temps ils n’apportent rien car les anomalies étaient&lt;br /&gt;
déjà isolées avec moins d’arbres.&lt;br /&gt;
&lt;br /&gt;
On considère que 100 arbres sont suffisants pour quasiment toutes les applications courantes de&lt;br /&gt;
recherche d’anomalies c’est d’ailleurs la valeur par défaut.&lt;br /&gt;
&lt;br /&gt;
===2)max_samples===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir l’échantillon max soit le nombre d&#039;échantillons à tirer pour former chaque&lt;br /&gt;
estimateur de base.&lt;br /&gt;
&lt;br /&gt;
En effet lorsque l’on crée un arbre, surtout quand nous avons une grande base de données nous&lt;br /&gt;
n’utilisons pas forcément tous les éléments de la base de données pour chaque arbres. Un échantillon&lt;br /&gt;
est créé pour n’utiliser que certaines données.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez changer cette valeur pour une valeur inferieur à 256 et aux nombres d’éléments dans&lt;br /&gt;
votre base de donnée si vous avez vraiment une contraintes de nombre d’opération à effectuer mais&lt;br /&gt;
celle si altèrera rapidement la qualité des résultats.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez mettre une valeur au dessus de 256 si votre base de donnée contient plus de 256&lt;br /&gt;
éléments et que vous n’avez pas peur d’une perte de rapidité et d’optimisation pour avoir un résultat&lt;br /&gt;
plus précis.&lt;br /&gt;
&lt;br /&gt;
Il est tout de même conseillé de laisser ce paramètre en paramétrage automatique celui-ci choisira la&lt;br /&gt;
valeur min(256, n_samples) qui pour la plupart des application est nettement appropriée.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===3) Contamination===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est le plus sensible et le plus délicat à choisir. Le taux de contamination est la proportion&lt;br /&gt;
d’anomalies attendues dans la base de données.&lt;br /&gt;
&lt;br /&gt;
Ce dernier est utilisé lors de l&#039;ajustement pour définir le seuil de normalité sur les scores des échantillons. Il est&lt;br /&gt;
essentiel car si nous affirmons une valeur pour ce paramètre le code nous donneras un nombre de&lt;br /&gt;
valeur anormales correspondant. Par exemple si nous entrons contamination=float(0.2) le programme&lt;br /&gt;
nous fournira 20% de valeurs aberrantes même si les scores d’anomalies en révèle plus ou moins.&lt;br /&gt;
La valeur par défaut est &#039;auto&#039;. Si &#039;auto&#039;, la valeur seuil sera déterminée comme dans l&#039;article original&lt;br /&gt;
d&#039;Isolation Forest.&lt;br /&gt;
&lt;br /&gt;
Si nous connaissons cette valeur en revanche par exemple si nous savons d’avance que nous voulons&lt;br /&gt;
enlever 10% des valeurs qui sont trop éloignées des autres nous pouvons l’indiquer tout en sachant&lt;br /&gt;
qu’elle est comprise entre (0, 0.5]&lt;br /&gt;
&lt;br /&gt;
===4) max_features ===&lt;br /&gt;
&lt;br /&gt;
Comme nous l’avons vu dans l’explication du principe de isolation forest, l’algorithme va créer&lt;br /&gt;
des séparations (splits) parmi les données jusqu’à isoler les différents éléments.&lt;br /&gt;
Or il n’est pas forcements nécessaire de continuer de créer des séparations jusqu’à ce que&lt;br /&gt;
tous les éléments de la base de données soit isolés. En effet comme nous avons vu les&lt;br /&gt;
éléments les plus difficiles à isoler ne sont pas ceux qui sont considérés comme anormal. Le&lt;br /&gt;
nombre de séparation créées peut donc être paramétré pour optimiser l’algorithme en indiquant la proportions de l&#039;echantillon à isoler pour arrêter un arbre.&lt;br /&gt;
&lt;br /&gt;
La valeur par défaut est 1.0, on peut prendre une valeur différente mais cette dernière doit être&lt;br /&gt;
inferieur à 1.&lt;br /&gt;
&lt;br /&gt;
===5) bootstrap===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen, si on entre la valeur ‘Vrai’ cela indique que les tirages&lt;br /&gt;
d’échantillonnage pour chaque arbre est effectué avec remise, si ce paramètre est ‘Faux’ cela indique&lt;br /&gt;
cela indique que l’échantillonnage est fait sans remise.&lt;br /&gt;
&lt;br /&gt;
Le réglage par défaut est False.&lt;br /&gt;
&lt;br /&gt;
===6) n_jobs===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre permet de définir le nombre de tâche à exécuter en parallèle pour l’utilisation des&lt;br /&gt;
fonction fit et predict que nous expliquons plus loin.&lt;br /&gt;
Il n’est pas utile de se soucier de ce paramètre à moins que nous ayons une dataset de très très&lt;br /&gt;
grande taille.&lt;br /&gt;
&lt;br /&gt;
Si sa valeur est ‘none’ une seule tâche est effectuée à la fois, si sa valeur est ‘-1’ le programme&lt;br /&gt;
utilisera alors tout le processeur disponible.&lt;br /&gt;
&lt;br /&gt;
===7) random_state===&lt;br /&gt;
Ce paramètre contrôle le caractère pseudo-aléatoire de l’échantillonnage et du choix des splits, pour&lt;br /&gt;
chaque étape de création d’arbre.&lt;br /&gt;
C’est un entier qui suivant sa valeur appellera les fonctions si dessous plusieurs fois afin de faire des&lt;br /&gt;
moyennes des résultats pour accroire le caractère aléatoire des tirages faits.&lt;br /&gt;
&lt;br /&gt;
===8) warm_start===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen qui si il est paramétrer sur Vrai, réutilise la solution de l&#039;appel&lt;br /&gt;
précédent pour s&#039;adapter et rajoute seulement des estimateurs dans l’ensemble. Si le paramètre&lt;br /&gt;
est Faux une toute nouvelle forêt est créée.&lt;br /&gt;
Ce paramètre peut être utile si vous utilisez une très grande base de donée et que vous pensez&lt;br /&gt;
qu’une précision supplémentaire est nécessaire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les paramètres conseillés sont les suivants :&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;, contamination= »auto »&lt;br /&gt;
,max_features=1.0, bootstrap=False, n_jobs=’None’, random_state=None,&lt;br /&gt;
warm_start=False)&lt;br /&gt;
&lt;br /&gt;
== Utilisation du model==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons défini le modèle avec lequel nous voulons travailler nous devons l’utiliser&lt;br /&gt;
pour l’appliquer à nos données.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous allons utiliser la fonction fit qui va ajuster le modèle sur les données. En d’autres mots&lt;br /&gt;
cette fonction crée tous les arbres de la forêt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.fit(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous utilisons ensuite la fonction decision_function qui va trouver le score d&#039;anomalie de chaque&lt;br /&gt;
éléments en étudiant pour chacun leurs positions dans tout les arbres créés précédemment. Elle va&lt;br /&gt;
donc calculer le score d&#039;anomalie moyen de X des classificateurs de base.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.decision_function(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
La fonction predict va ensuite attribuer une valeur a chaque éléments qui indique si cet élément est&lt;br /&gt;
considéré comme normal (valeur 0) ou comme anomalie (-1) .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.predict(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour plus de lisibilité nous plaçons ces deux scores dans notre tableau de données grâce aux fonctions&lt;br /&gt;
suivantes :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finalement nous cherchons un affichage correcte des résultats et pour cela nous isolons toutes les&lt;br /&gt;
lignes correspondant à des anomalies pour les mettre dans un tableau séparé. Nous en profitons pour&lt;br /&gt;
isoler les index des anomalies dans une variable qui pourrait nous être utile plus tard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et pour terminer nous affichons les lignes correspondants aux anomalies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour visualiser les erreurs nous pouvons utiliser le code suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;# valeur à entrer&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var1 = &#039;’&lt;br /&gt;
&lt;br /&gt;
var2 = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pred_scores = -1*model.score_samples(df)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(df[[var1]],df[[var2]], c=pred_scores, cmap=&#039;RdBu&#039;)&lt;br /&gt;
&lt;br /&gt;
plt.colorbar(label=&#039;Simplified Anomaly Score&#039;)&lt;br /&gt;
&lt;br /&gt;
show()&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez choisir les deux noms des colonnes des variables que vous voulez choisir comme abscisse et&lt;br /&gt;
ordonnées de votre graphique.&lt;br /&gt;
Cet affichage permet de visualiser l’ensemble des données ainsi que leurs score d’anomalies associé.&lt;br /&gt;
Cet affichages est très révélateur pour les base de données de dimensions 2 voire 3 mais pour les&lt;br /&gt;
dimensions plus élevées cet affichage perd de son intérêt.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=14240</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=14240"/>
		<updated>2022-05-29T18:22:17Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelques mots l’algorithme Isolation Forest est un algorithme non supervisé de machine learning. Il est conçu pour détecter des valeurs anormales au sein d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voitures, ordinateurs, montres connectées…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des premières étapes après la collecte des données est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être dû à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire à cause de cause extérieurs (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associées, la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart (distance par rapport) à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest3.png]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest4.png]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isolé ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre. Ici la population est petite il est donc facile de compléter l&#039;arbre jusqu&#039;à ce que tous les éléments soient isolés mais lorsque on traite des populations bien plus imposantes il n&#039;est pas nécessaire de compléter les arbres, on s&#039;arrête usuellement lorsque quelques individus ont étés isolés.  &lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest5.png]]&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « forêt » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbres nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui ont étés réalisés pour isoler l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler, ce qui est faaible. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.png]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler, ce qui est plus élevé. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema6.png]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la forêt nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’élément relevé dépend du taux d’anomalie précédemment indiqué.&lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
&lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de données d’apprentissage &lt;br /&gt;
&lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribuer un score d’anomalie grâce à l’analyse de la foret créée à l’étape précédente&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tutoriel.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ou la page wiki suivante : &lt;br /&gt;
&lt;br /&gt;
[[Tutoriel utilisation algorithme Isolation Forest]]&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prises en compte :&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalies est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de splits nécessaires pour l’isoler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions dû au fait que les points soient clairsemés dans l’espace de dimension élevé.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Tutoriel_utilisation_algorithme_Isolation_Forest&amp;diff=13972</id>
		<title>Tutoriel utilisation algorithme Isolation Forest</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Tutoriel_utilisation_algorithme_Isolation_Forest&amp;diff=13972"/>
		<updated>2022-05-27T17:30:36Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra&lt;br /&gt;
comment utiliser facilement cet algorithme pour analyser votre propre banque de données. Il vous&lt;br /&gt;
fournira le code nécessaire mais aussi vous expliquera quels paramètres modifier si vous souhaitez&lt;br /&gt;
modifier le code pour l’adapter à vos besoins.&lt;br /&gt;
&lt;br /&gt;
=1 ) Tutoriel=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce tutoriel correctement il faut créer un fichier .py par exemple où on copie toute les&lt;br /&gt;
parties entre barres.&lt;br /&gt;
&lt;br /&gt;
==1 Formatage des données==&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord vous devez formater vos données afin qu&#039;elles soient compatibles avec la suite de&lt;br /&gt;
ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Pour cela créez un tableau sur excel ou autre tableur. La première colonne est l&#039;identifiant qui&lt;br /&gt;
vous permettra d&#039;identifier rapidement les anomalies qui vous seront indiquées, peut être le&lt;br /&gt;
numéro de la ligne par exemple.&lt;br /&gt;
&lt;br /&gt;
Ensuite chaque colonne dont on mettra le titre en ligne 1 contiendra les valeurs d&#039;une&lt;br /&gt;
caractéristique pour chaque élément de la base de données.&lt;br /&gt;
Finalement, enregistrez ce document sous le format cvs séparé par des virgules dans un&lt;br /&gt;
dossier de votre choix.&lt;br /&gt;
&lt;br /&gt;
==2 Import des bibliothèques==&lt;br /&gt;
&lt;br /&gt;
Vous devez maintenant créer un fichier dans le MEME dossier que celui où vous avez mis votre&lt;br /&gt;
dataset. Ce fichier est celui où nous allons écrire le programme une extension .py est donc conseillée.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de l’algorithme comme nous l’avons vu plus haut est assez complexe mais&lt;br /&gt;
heureusement des bibliothèque assez simplifiée ont étés crées ce qui va nous simplifier grandement&lt;br /&gt;
la tâche. Malheureusement ceci peut aussi nous désavantager car les seules fonctions qui sont&lt;br /&gt;
données sont très opaque et ne laisse peut de place à la compréhension du code interne et à la&lt;br /&gt;
modification de ce dernier. C’est pour cela que nous allons essayer de nous concentrer sur la&lt;br /&gt;
compréhension des arguments que nous donnons aux fonctions que nous allons utiliser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;import numpy as np&lt;br /&gt;
&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
from sklearn.ensemble import IsolationForest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous voulez trouver les anomalies en prenant en compte une seule variable de votre base de&lt;br /&gt;
donnez suivez la partie : &amp;quot;Recherche anomalie pour une seule variable&amp;quot;. Si vous voulez connaitre&lt;br /&gt;
les annomalies en prenant en comptes toutes les variables entrées dans votre documents csv&lt;br /&gt;
suivez la partie : &amp;quot;Recherche anomalie pour toute les variable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==3 Recherche anomalie pour toute les variables¶==&lt;br /&gt;
&lt;br /&gt;
Dans cette section nous prenons en compte toute les variables entrées pour les éléments de notre&lt;br /&gt;
dataset.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
df = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
df_modif = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
model.fit(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&lt;br /&gt;
anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la première ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset.&lt;br /&gt;
&lt;br /&gt;
==3 BIS Recherche anomalie pour une seule variable==&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez savoir qu’elles sont les valeurs anormales pour une seule variables, par exemple ne&lt;br /&gt;
prendre en compte que la variable de l’age dans une certaine population, il faut utiliser le code&lt;br /&gt;
suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
nom_variable =&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Reste du code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.fit(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;df[&#039;scores&#039;]=model.decision_function(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
df[&#039;anomaly&#039;]=model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anomaly=df.loc[df[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la premiere ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset. Ainsi que le titre de la colonne de la variable que&lt;br /&gt;
vous voulez prendre en compte dans nom_variable.&lt;br /&gt;
&lt;br /&gt;
==4 Utiliser les résultats==&lt;br /&gt;
&lt;br /&gt;
Lancez le programme. Ce dernier va vous affichez les valeurs dites anormales. Vous pouvez&lt;br /&gt;
ensuite agir sur ces dernières en utilisant la variable anomaly_index qui est un tableau qui&lt;br /&gt;
contient tous les indices des anomalies détectées.&lt;br /&gt;
&lt;br /&gt;
=2)Explication plus précise du code=&lt;br /&gt;
&lt;br /&gt;
Voici une explication plus précise de chaque fonction utilisée dans le code donné dans le tuto.&lt;br /&gt;
&lt;br /&gt;
==1 Récupération des données==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, si nous avons bien suivi le tutoriel fournis nous avons déjà créée un fichier CSV qui&lt;br /&gt;
rassemble nos donnés. La fonction suivante permet de stocker toute ces informations dans une&lt;br /&gt;
variable en lisant le contenu de notre fichier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df = pd.read_csv(nom_fichier)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 2 Création du model ==&lt;br /&gt;
&lt;br /&gt;
Notre but maintenant est de définir le modèle utilisé par l’algorithme Isolation Forest ensuite. Cela&lt;br /&gt;
reviens à créer un objet contenant tous les paramètres donc la bibliothèque a besoin pour fonctionner.&lt;br /&gt;
&lt;br /&gt;
Pour cela vous allez devoir choisir des paramètres suivants vos besoins :&lt;br /&gt;
&lt;br /&gt;
===1) n_estimators===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir le nombre d&#039;estimateurs de base, c&#039;est-à-dire le nombre d&#039;arbres qui seront&lt;br /&gt;
construits dans la forêt.&lt;br /&gt;
&lt;br /&gt;
Plus le nombre d’arbre est élevé plus l’algorithme est fiable car les moyennes souffrirons moins des&lt;br /&gt;
valeurs écartées mais ces calculs prennent du temps et son couteux c’est pour cela qu’un nombre trop&lt;br /&gt;
élevé d’arbre serait du « gâchis » car la plupart du temps ils n’apportent rien car les anomalies étaient&lt;br /&gt;
déjà isolées avec moins d’arbres.&lt;br /&gt;
&lt;br /&gt;
On considère que 100 arbres sont suffisants pour quasiment toutes les applications courantes de&lt;br /&gt;
recherche d’anomalies c’est d’ailleurs la valeur par défaut.&lt;br /&gt;
&lt;br /&gt;
===2)max_samples===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir l’échantillon max soit le nombre d&#039;échantillons à tirer pour former chaque&lt;br /&gt;
estimateur de base.&lt;br /&gt;
&lt;br /&gt;
En effet lorsque l’on crée un arbre, surtout quand nous avons une grande banque de donnée nous&lt;br /&gt;
n’utilisons pas forcément tous les éléments de la base de donnée pour chaque arbres. Un échantillon&lt;br /&gt;
est créé pour n’utiliser que certaines données.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez changer cette valeur pour une valeur inferieur à 256 et aux nombres d’éléments dans&lt;br /&gt;
votre base de donnée si vous avez vraiment une contraintes de nombre d’opération à effectuer mais&lt;br /&gt;
celle si altèrera rapidement la qualité des résultats.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez mettre une valeur au dessus de 256 si votre base de donnée contient plus de 256&lt;br /&gt;
éléments et que vous n’avez pas peur d’une perte de rapidité et d’optimisation pour avoir un résultat&lt;br /&gt;
plus précis.&lt;br /&gt;
&lt;br /&gt;
Il est tout de même conseillé de laisser ce paramètre en paramétrage automatique celui-ci choisira la&lt;br /&gt;
valeur min(256, n_samples) qui pour la plupart des application est nettement appropriée.&lt;br /&gt;
Le programme créera donc un nombre correspondant d’échantillons qui seront utilisés pour créer&lt;br /&gt;
chaque arbres.&lt;br /&gt;
&lt;br /&gt;
===3) Contamination===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est le plus sensible et le plus délicat à choisir. Le taux de contamination est la proportion&lt;br /&gt;
d’anomalies attendues dans la base de données.&lt;br /&gt;
&lt;br /&gt;
Ce dernier est utilisé lors de l&#039;ajustement pour définir le seuil sur les scores des échantillons. Il est&lt;br /&gt;
essentiel car si nous affirmons une valeur pour ce paramètre le code nous donneras un nombre de&lt;br /&gt;
valeur anormales correspondant. Par exemple si nous entrons contamination=float(0.2) le programme&lt;br /&gt;
nous fournira 20% de valeurs aberrantes même si les scores d’anomalies en révèle plus ou moins.&lt;br /&gt;
La valeur par défaut est &#039;auto&#039;. Si &#039;auto&#039;, la valeur seuil sera déterminée comme dans l&#039;article original&lt;br /&gt;
d&#039;Isolation Forest.&lt;br /&gt;
&lt;br /&gt;
Si nous connaissons cette valeur en revanche par exemple si nous savons d’avance que nous voulons&lt;br /&gt;
enlever 10% des valeurs qui sont trop éloignées des autres nous pouvons l’indiquer tout en sachant&lt;br /&gt;
qu’elle est comprise entre (0, 0.5]&lt;br /&gt;
&lt;br /&gt;
===4) max_features ===&lt;br /&gt;
&lt;br /&gt;
Comme nous l’avons vu dans l’explication du principe de isolation forest, l’algorithme va créer&lt;br /&gt;
des séparations parmi les données jusqu’à isoler les différents éléments.&lt;br /&gt;
Or il n’est pas forcements nécessaire de continuer de créer des séparations jusqu’à ce que&lt;br /&gt;
tous les éléments de la base de données soit isolés. En effet comme nous avons vu les&lt;br /&gt;
éléments les plus difficiles à isoler ne sont pas ceux qui sont considérés comme anormal. Le&lt;br /&gt;
nombre de séparation créées peut donc être paramétré pour optimiser l’algorithme.&lt;br /&gt;
&lt;br /&gt;
La valeur par défaut est 1.0, on peut prendre une valeur différente mais cette dernière doit être&lt;br /&gt;
inferieur à 1.&lt;br /&gt;
&lt;br /&gt;
===5) bootstrap===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen, si on entre la valeur ‘Vrai’ cela indique que les tirages&lt;br /&gt;
d’échantillonnage pour chaque arbre est effectué avec remise, si ce paramètre est ‘Faux’ cela indique&lt;br /&gt;
cela indique que l’échantillonnage est fait sans remise.&lt;br /&gt;
Le réglage par défaut est False.&lt;br /&gt;
&lt;br /&gt;
===6) n_jobs===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre permet de définir le nombre de tâche à exécuter en parallèle pour l’utilisation des&lt;br /&gt;
fonction fit et predict que nous expliquons plus loin.&lt;br /&gt;
Il n’est pas utile de se soucier de ce paramètre à moins que nous ayons une dataset de très très&lt;br /&gt;
grande taille.&lt;br /&gt;
&lt;br /&gt;
Si sa valeur est ‘none’ une seule tâche est effectuée à la fois, si sa valeur est ‘-1’ le programme&lt;br /&gt;
utilisera alors tout le processeur disponible.&lt;br /&gt;
&lt;br /&gt;
===7) random_state===&lt;br /&gt;
Ce paramètre contrôle le caractère pseudo-aléatoire de l’échantillonnage et du choix des splits, pour&lt;br /&gt;
chaque étape de création d’arbre.&lt;br /&gt;
C’est un entier qui suivant sa valeur appellera les fonctions si dessous plusieurs fois afin de faire des&lt;br /&gt;
moyennes des résultats pour accroire le caractère aléatoire des tirages faits.&lt;br /&gt;
&lt;br /&gt;
===8) warm_start===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen qui si il est paramétrer sur Vrai, réutilise la solution de l&#039;appel&lt;br /&gt;
précédent pour s&#039;adapter et rajoute seulement des estimateur dans l’ensemble. Si le paramètre&lt;br /&gt;
est Faux une toute nouvelle forêt est créée.&lt;br /&gt;
Ce paramètre peut être utile si vous utilisez une très grande base de donée et que vous pensez&lt;br /&gt;
qu’une précision supplémentaire est nécessaire.&lt;br /&gt;
&lt;br /&gt;
Les paramètres conseillés sont les suivants :&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;, contamination= »auto »&lt;br /&gt;
,max_features=1.0, bootstrap=False, n_jobs=’None’, random_state=None,&lt;br /&gt;
warm_start=False)&lt;br /&gt;
&lt;br /&gt;
== Utilisation du model==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons défini le modèle avec lequel nous voulons travailler nous devons l’utiliser&lt;br /&gt;
pour l’appliquer à nos données.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous allons utiliser la fonction fit qui va ajuster le modèle sur les données. En d’autres mots&lt;br /&gt;
cette fonction crée tous les arbres de la forêt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.fit(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous utilisons ensuite la fonction decision_function qui va trouver le score d&#039;anomalie de chaque&lt;br /&gt;
éléments en étudiants pour chacun leurs positions dans tout les arbres créés précédemment. Elle va&lt;br /&gt;
donc calculer le score d&#039;anomalie moyen de X des classificateurs de base.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.decision_function(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
La fonction predict va ensuite attribuer une valeur a chaque éléments qui indique si cet élément est&lt;br /&gt;
considéré comme normal (valeur 0) ou comme anomalie (-1) .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.predict(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour plus de lisibilité nous plaçons ces deux scores dans notre tableau de données grâce aux fonctions&lt;br /&gt;
suivantes :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finalement nous cherchons un affichage correcte des résultats et pour cela nous isolons toute les&lt;br /&gt;
lignes correspondants à des anomalies pour les mettre dans un tableau séparé. Nous en profitons pour&lt;br /&gt;
isoler les index des anomalies dans une variable qui pourrait nous être utile plus tard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et pour terminer nous affichons les lignes correspondants aux anomalies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour visualiser les erreurs nous pouvons utiliser le code suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;# valeur à entrer&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var1 = &#039;’&lt;br /&gt;
&lt;br /&gt;
var2 = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pred_scores = -1*model.score_samples(df)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(df[[var1]],df[[var2]], c=pred_scores, cmap=&#039;RdBu&#039;)&lt;br /&gt;
&lt;br /&gt;
plt.colorbar(label=&#039;Simplified Anomaly Score&#039;)&lt;br /&gt;
&lt;br /&gt;
show()&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez choisir les deux noms des colonnes des variables que vous voulez choisir comme abscisse et&lt;br /&gt;
ordonnées de votre graphique.&lt;br /&gt;
Cet affichage permet de visualiser l’ensemble des données ainsi que leurs score d’anomalies associé.&lt;br /&gt;
Cet affichages est très révélateur pour les base de données de dimensions 2 voire 3 mais pour les&lt;br /&gt;
dimensions plus élevées cet affichage perd de son intérêt.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Tutoriel_utilisation_algorithme_Isolation_Forest&amp;diff=13971</id>
		<title>Tutoriel utilisation algorithme Isolation Forest</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Tutoriel_utilisation_algorithme_Isolation_Forest&amp;diff=13971"/>
		<updated>2022-05-27T17:30:09Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Page créée avec « Tutoriel d’utilisation de l’algorithme Isolation forest  Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra comme... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutoriel d’utilisation de l’algorithme Isolation forest&lt;br /&gt;
&lt;br /&gt;
Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra&lt;br /&gt;
comment utiliser facilement cet algorithme pour analyser votre propre banque de données. Il vous&lt;br /&gt;
fournira le code nécessaire mais aussi vous expliquera quels paramètres modifier si vous souhaitez&lt;br /&gt;
modifier le code pour l’adapter à vos besoins.&lt;br /&gt;
&lt;br /&gt;
=1 ) Tutoriel=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce tutoriel correctement il faut créer un fichier .py par exemple où on copie toute les&lt;br /&gt;
parties entre barres.&lt;br /&gt;
&lt;br /&gt;
==1 Formatage des données==&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord vous devez formater vos données afin qu&#039;elles soient compatibles avec la suite de&lt;br /&gt;
ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Pour cela créez un tableau sur excel ou autre tableur. La première colonne est l&#039;identifiant qui&lt;br /&gt;
vous permettra d&#039;identifier rapidement les anomalies qui vous seront indiquées, peut être le&lt;br /&gt;
numéro de la ligne par exemple.&lt;br /&gt;
&lt;br /&gt;
Ensuite chaque colonne dont on mettra le titre en ligne 1 contiendra les valeurs d&#039;une&lt;br /&gt;
caractéristique pour chaque élément de la base de données.&lt;br /&gt;
Finalement, enregistrez ce document sous le format cvs séparé par des virgules dans un&lt;br /&gt;
dossier de votre choix.&lt;br /&gt;
&lt;br /&gt;
==2 Import des bibliothèques==&lt;br /&gt;
&lt;br /&gt;
Vous devez maintenant créer un fichier dans le MEME dossier que celui où vous avez mis votre&lt;br /&gt;
dataset. Ce fichier est celui où nous allons écrire le programme une extension .py est donc conseillée.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de l’algorithme comme nous l’avons vu plus haut est assez complexe mais&lt;br /&gt;
heureusement des bibliothèque assez simplifiée ont étés crées ce qui va nous simplifier grandement&lt;br /&gt;
la tâche. Malheureusement ceci peut aussi nous désavantager car les seules fonctions qui sont&lt;br /&gt;
données sont très opaque et ne laisse peut de place à la compréhension du code interne et à la&lt;br /&gt;
modification de ce dernier. C’est pour cela que nous allons essayer de nous concentrer sur la&lt;br /&gt;
compréhension des arguments que nous donnons aux fonctions que nous allons utiliser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;import numpy as np&lt;br /&gt;
&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
from sklearn.ensemble import IsolationForest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous voulez trouver les anomalies en prenant en compte une seule variable de votre base de&lt;br /&gt;
donnez suivez la partie : &amp;quot;Recherche anomalie pour une seule variable&amp;quot;. Si vous voulez connaitre&lt;br /&gt;
les annomalies en prenant en comptes toutes les variables entrées dans votre documents csv&lt;br /&gt;
suivez la partie : &amp;quot;Recherche anomalie pour toute les variable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==3 Recherche anomalie pour toute les variables¶==&lt;br /&gt;
&lt;br /&gt;
Dans cette section nous prenons en compte toute les variables entrées pour les éléments de notre&lt;br /&gt;
dataset.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
df = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
df_modif = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
model.fit(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&lt;br /&gt;
anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la première ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset.&lt;br /&gt;
&lt;br /&gt;
==3 BIS Recherche anomalie pour une seule variable==&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez savoir qu’elles sont les valeurs anormales pour une seule variables, par exemple ne&lt;br /&gt;
prendre en compte que la variable de l’age dans une certaine population, il faut utiliser le code&lt;br /&gt;
suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
nom_variable =&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Reste du code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.fit(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;df[&#039;scores&#039;]=model.decision_function(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
df[&#039;anomaly&#039;]=model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anomaly=df.loc[df[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la premiere ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset. Ainsi que le titre de la colonne de la variable que&lt;br /&gt;
vous voulez prendre en compte dans nom_variable.&lt;br /&gt;
&lt;br /&gt;
==4 Utiliser les résultats==&lt;br /&gt;
&lt;br /&gt;
Lancez le programme. Ce dernier va vous affichez les valeurs dites anormales. Vous pouvez&lt;br /&gt;
ensuite agir sur ces dernières en utilisant la variable anomaly_index qui est un tableau qui&lt;br /&gt;
contient tous les indices des anomalies détectées.&lt;br /&gt;
&lt;br /&gt;
=2)Explication plus précise du code=&lt;br /&gt;
&lt;br /&gt;
Voici une explication plus précise de chaque fonction utilisée dans le code donné dans le tuto.&lt;br /&gt;
&lt;br /&gt;
==1 Récupération des données==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, si nous avons bien suivi le tutoriel fournis nous avons déjà créée un fichier CSV qui&lt;br /&gt;
rassemble nos donnés. La fonction suivante permet de stocker toute ces informations dans une&lt;br /&gt;
variable en lisant le contenu de notre fichier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df = pd.read_csv(nom_fichier)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 2 Création du model ==&lt;br /&gt;
&lt;br /&gt;
Notre but maintenant est de définir le modèle utilisé par l’algorithme Isolation Forest ensuite. Cela&lt;br /&gt;
reviens à créer un objet contenant tous les paramètres donc la bibliothèque a besoin pour fonctionner.&lt;br /&gt;
&lt;br /&gt;
Pour cela vous allez devoir choisir des paramètres suivants vos besoins :&lt;br /&gt;
&lt;br /&gt;
===1) n_estimators===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir le nombre d&#039;estimateurs de base, c&#039;est-à-dire le nombre d&#039;arbres qui seront&lt;br /&gt;
construits dans la forêt.&lt;br /&gt;
&lt;br /&gt;
Plus le nombre d’arbre est élevé plus l’algorithme est fiable car les moyennes souffrirons moins des&lt;br /&gt;
valeurs écartées mais ces calculs prennent du temps et son couteux c’est pour cela qu’un nombre trop&lt;br /&gt;
élevé d’arbre serait du « gâchis » car la plupart du temps ils n’apportent rien car les anomalies étaient&lt;br /&gt;
déjà isolées avec moins d’arbres.&lt;br /&gt;
&lt;br /&gt;
On considère que 100 arbres sont suffisants pour quasiment toutes les applications courantes de&lt;br /&gt;
recherche d’anomalies c’est d’ailleurs la valeur par défaut.&lt;br /&gt;
&lt;br /&gt;
===2)max_samples===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir l’échantillon max soit le nombre d&#039;échantillons à tirer pour former chaque&lt;br /&gt;
estimateur de base.&lt;br /&gt;
&lt;br /&gt;
En effet lorsque l’on crée un arbre, surtout quand nous avons une grande banque de donnée nous&lt;br /&gt;
n’utilisons pas forcément tous les éléments de la base de donnée pour chaque arbres. Un échantillon&lt;br /&gt;
est créé pour n’utiliser que certaines données.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez changer cette valeur pour une valeur inferieur à 256 et aux nombres d’éléments dans&lt;br /&gt;
votre base de donnée si vous avez vraiment une contraintes de nombre d’opération à effectuer mais&lt;br /&gt;
celle si altèrera rapidement la qualité des résultats.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez mettre une valeur au dessus de 256 si votre base de donnée contient plus de 256&lt;br /&gt;
éléments et que vous n’avez pas peur d’une perte de rapidité et d’optimisation pour avoir un résultat&lt;br /&gt;
plus précis.&lt;br /&gt;
&lt;br /&gt;
Il est tout de même conseillé de laisser ce paramètre en paramétrage automatique celui-ci choisira la&lt;br /&gt;
valeur min(256, n_samples) qui pour la plupart des application est nettement appropriée.&lt;br /&gt;
Le programme créera donc un nombre correspondant d’échantillons qui seront utilisés pour créer&lt;br /&gt;
chaque arbres.&lt;br /&gt;
&lt;br /&gt;
===3) Contamination===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est le plus sensible et le plus délicat à choisir. Le taux de contamination est la proportion&lt;br /&gt;
d’anomalies attendues dans la base de données.&lt;br /&gt;
&lt;br /&gt;
Ce dernier est utilisé lors de l&#039;ajustement pour définir le seuil sur les scores des échantillons. Il est&lt;br /&gt;
essentiel car si nous affirmons une valeur pour ce paramètre le code nous donneras un nombre de&lt;br /&gt;
valeur anormales correspondant. Par exemple si nous entrons contamination=float(0.2) le programme&lt;br /&gt;
nous fournira 20% de valeurs aberrantes même si les scores d’anomalies en révèle plus ou moins.&lt;br /&gt;
La valeur par défaut est &#039;auto&#039;. Si &#039;auto&#039;, la valeur seuil sera déterminée comme dans l&#039;article original&lt;br /&gt;
d&#039;Isolation Forest.&lt;br /&gt;
&lt;br /&gt;
Si nous connaissons cette valeur en revanche par exemple si nous savons d’avance que nous voulons&lt;br /&gt;
enlever 10% des valeurs qui sont trop éloignées des autres nous pouvons l’indiquer tout en sachant&lt;br /&gt;
qu’elle est comprise entre (0, 0.5]&lt;br /&gt;
&lt;br /&gt;
===4) max_features ===&lt;br /&gt;
&lt;br /&gt;
Comme nous l’avons vu dans l’explication du principe de isolation forest, l’algorithme va créer&lt;br /&gt;
des séparations parmi les données jusqu’à isoler les différents éléments.&lt;br /&gt;
Or il n’est pas forcements nécessaire de continuer de créer des séparations jusqu’à ce que&lt;br /&gt;
tous les éléments de la base de données soit isolés. En effet comme nous avons vu les&lt;br /&gt;
éléments les plus difficiles à isoler ne sont pas ceux qui sont considérés comme anormal. Le&lt;br /&gt;
nombre de séparation créées peut donc être paramétré pour optimiser l’algorithme.&lt;br /&gt;
&lt;br /&gt;
La valeur par défaut est 1.0, on peut prendre une valeur différente mais cette dernière doit être&lt;br /&gt;
inferieur à 1.&lt;br /&gt;
&lt;br /&gt;
===5) bootstrap===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen, si on entre la valeur ‘Vrai’ cela indique que les tirages&lt;br /&gt;
d’échantillonnage pour chaque arbre est effectué avec remise, si ce paramètre est ‘Faux’ cela indique&lt;br /&gt;
cela indique que l’échantillonnage est fait sans remise.&lt;br /&gt;
Le réglage par défaut est False.&lt;br /&gt;
&lt;br /&gt;
===6) n_jobs===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre permet de définir le nombre de tâche à exécuter en parallèle pour l’utilisation des&lt;br /&gt;
fonction fit et predict que nous expliquons plus loin.&lt;br /&gt;
Il n’est pas utile de se soucier de ce paramètre à moins que nous ayons une dataset de très très&lt;br /&gt;
grande taille.&lt;br /&gt;
&lt;br /&gt;
Si sa valeur est ‘none’ une seule tâche est effectuée à la fois, si sa valeur est ‘-1’ le programme&lt;br /&gt;
utilisera alors tout le processeur disponible.&lt;br /&gt;
&lt;br /&gt;
===7) random_state===&lt;br /&gt;
Ce paramètre contrôle le caractère pseudo-aléatoire de l’échantillonnage et du choix des splits, pour&lt;br /&gt;
chaque étape de création d’arbre.&lt;br /&gt;
C’est un entier qui suivant sa valeur appellera les fonctions si dessous plusieurs fois afin de faire des&lt;br /&gt;
moyennes des résultats pour accroire le caractère aléatoire des tirages faits.&lt;br /&gt;
&lt;br /&gt;
===8) warm_start===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen qui si il est paramétrer sur Vrai, réutilise la solution de l&#039;appel&lt;br /&gt;
précédent pour s&#039;adapter et rajoute seulement des estimateur dans l’ensemble. Si le paramètre&lt;br /&gt;
est Faux une toute nouvelle forêt est créée.&lt;br /&gt;
Ce paramètre peut être utile si vous utilisez une très grande base de donée et que vous pensez&lt;br /&gt;
qu’une précision supplémentaire est nécessaire.&lt;br /&gt;
&lt;br /&gt;
Les paramètres conseillés sont les suivants :&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;, contamination= »auto »&lt;br /&gt;
,max_features=1.0, bootstrap=False, n_jobs=’None’, random_state=None,&lt;br /&gt;
warm_start=False)&lt;br /&gt;
&lt;br /&gt;
== Utilisation du model==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons défini le modèle avec lequel nous voulons travailler nous devons l’utiliser&lt;br /&gt;
pour l’appliquer à nos données.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous allons utiliser la fonction fit qui va ajuster le modèle sur les données. En d’autres mots&lt;br /&gt;
cette fonction crée tous les arbres de la forêt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.fit(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous utilisons ensuite la fonction decision_function qui va trouver le score d&#039;anomalie de chaque&lt;br /&gt;
éléments en étudiants pour chacun leurs positions dans tout les arbres créés précédemment. Elle va&lt;br /&gt;
donc calculer le score d&#039;anomalie moyen de X des classificateurs de base.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.decision_function(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
La fonction predict va ensuite attribuer une valeur a chaque éléments qui indique si cet élément est&lt;br /&gt;
considéré comme normal (valeur 0) ou comme anomalie (-1) .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.predict(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour plus de lisibilité nous plaçons ces deux scores dans notre tableau de données grâce aux fonctions&lt;br /&gt;
suivantes :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finalement nous cherchons un affichage correcte des résultats et pour cela nous isolons toute les&lt;br /&gt;
lignes correspondants à des anomalies pour les mettre dans un tableau séparé. Nous en profitons pour&lt;br /&gt;
isoler les index des anomalies dans une variable qui pourrait nous être utile plus tard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et pour terminer nous affichons les lignes correspondants aux anomalies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour visualiser les erreurs nous pouvons utiliser le code suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;# valeur à entrer&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var1 = &#039;’&lt;br /&gt;
&lt;br /&gt;
var2 = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pred_scores = -1*model.score_samples(df)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(df[[var1]],df[[var2]], c=pred_scores, cmap=&#039;RdBu&#039;)&lt;br /&gt;
&lt;br /&gt;
plt.colorbar(label=&#039;Simplified Anomaly Score&#039;)&lt;br /&gt;
&lt;br /&gt;
show()&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez choisir les deux noms des colonnes des variables que vous voulez choisir comme abscisse et&lt;br /&gt;
ordonnées de votre graphique.&lt;br /&gt;
Cet affichage permet de visualiser l’ensemble des données ainsi que leurs score d’anomalies associé.&lt;br /&gt;
Cet affichages est très révélateur pour les base de données de dimensions 2 voire 3 mais pour les&lt;br /&gt;
dimensions plus élevées cet affichage perd de son intérêt.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13970</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13970"/>
		<updated>2022-05-27T17:29:56Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* Tuto Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au sein d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voitures, ordinateurs, montres connectées…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être dû à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
 &lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest3.png]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest4.png]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest5.png]]&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.png]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema6.png]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué.&lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
&lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
&lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tutoriel.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ou sur la page wiki suivante : &lt;br /&gt;
[[Tutoriel utilisation algorithme Isolation Forest]]&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13969</id>
		<title>Wiki tuto</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13969"/>
		<updated>2022-05-27T17:27:21Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* 4.3 Utilisation du model */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutoriel d’utilisation de l’algorithme Isolation forest&lt;br /&gt;
&lt;br /&gt;
Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra&lt;br /&gt;
comment utiliser facilement cet algorithme pour analyser votre propre banque de données. Il vous&lt;br /&gt;
fournira le code nécessaire mais aussi vous expliquera quels paramètres modifier si vous souhaitez&lt;br /&gt;
modifier le code pour l’adapter à vos besoins.&lt;br /&gt;
&lt;br /&gt;
=1 ) Tutoriel=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce tutoriel correctement il faut créer un fichier .py par exemple où on copie toute les&lt;br /&gt;
parties entre barres.&lt;br /&gt;
&lt;br /&gt;
==1 Formatage des données==&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord vous devez formater vos données afin qu&#039;elles soient compatibles avec la suite de&lt;br /&gt;
ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Pour cela créez un tableau sur excel ou autre tableur. La première colonne est l&#039;identifiant qui&lt;br /&gt;
vous permettra d&#039;identifier rapidement les anomalies qui vous seront indiquées, peut être le&lt;br /&gt;
numéro de la ligne par exemple.&lt;br /&gt;
&lt;br /&gt;
Ensuite chaque colonne dont on mettra le titre en ligne 1 contiendra les valeurs d&#039;une&lt;br /&gt;
caractéristique pour chaque élément de la base de données.&lt;br /&gt;
Finalement, enregistrez ce document sous le format cvs séparé par des virgules dans un&lt;br /&gt;
dossier de votre choix.&lt;br /&gt;
&lt;br /&gt;
==2 Import des bibliothèques==&lt;br /&gt;
&lt;br /&gt;
Vous devez maintenant créer un fichier dans le MEME dossier que celui où vous avez mis votre&lt;br /&gt;
dataset. Ce fichier est celui où nous allons écrire le programme une extension .py est donc conseillée.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de l’algorithme comme nous l’avons vu plus haut est assez complexe mais&lt;br /&gt;
heureusement des bibliothèque assez simplifiée ont étés crées ce qui va nous simplifier grandement&lt;br /&gt;
la tâche. Malheureusement ceci peut aussi nous désavantager car les seules fonctions qui sont&lt;br /&gt;
données sont très opaque et ne laisse peut de place à la compréhension du code interne et à la&lt;br /&gt;
modification de ce dernier. C’est pour cela que nous allons essayer de nous concentrer sur la&lt;br /&gt;
compréhension des arguments que nous donnons aux fonctions que nous allons utiliser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;import numpy as np&lt;br /&gt;
&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
from sklearn.ensemble import IsolationForest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous voulez trouver les anomalies en prenant en compte une seule variable de votre base de&lt;br /&gt;
donnez suivez la partie : &amp;quot;Recherche anomalie pour une seule variable&amp;quot;. Si vous voulez connaitre&lt;br /&gt;
les annomalies en prenant en comptes toutes les variables entrées dans votre documents csv&lt;br /&gt;
suivez la partie : &amp;quot;Recherche anomalie pour toute les variable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==3 Recherche anomalie pour toute les variables¶==&lt;br /&gt;
&lt;br /&gt;
Dans cette section nous prenons en compte toute les variables entrées pour les éléments de notre&lt;br /&gt;
dataset.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
df = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
df_modif = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
model.fit(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&lt;br /&gt;
anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la première ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset.&lt;br /&gt;
&lt;br /&gt;
==3 BIS Recherche anomalie pour une seule variable==&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez savoir qu’elles sont les valeurs anormales pour une seule variables, par exemple ne&lt;br /&gt;
prendre en compte que la variable de l’age dans une certaine population, il faut utiliser le code&lt;br /&gt;
suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
nom_variable =&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Reste du code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.fit(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;df[&#039;scores&#039;]=model.decision_function(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
df[&#039;anomaly&#039;]=model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anomaly=df.loc[df[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la premiere ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset. Ainsi que le titre de la colonne de la variable que&lt;br /&gt;
vous voulez prendre en compte dans nom_variable.&lt;br /&gt;
&lt;br /&gt;
==4 Utiliser les résultats==&lt;br /&gt;
&lt;br /&gt;
Lancez le programme. Ce dernier va vous affichez les valeurs dites anormales. Vous pouvez&lt;br /&gt;
ensuite agir sur ces dernières en utilisant la variable anomaly_index qui est un tableau qui&lt;br /&gt;
contient tous les indices des anomalies détectées.&lt;br /&gt;
&lt;br /&gt;
=2)Explication plus précise du code=&lt;br /&gt;
&lt;br /&gt;
Voici une explication plus précise de chaque fonction utilisée dans le code donné dans le tuto.&lt;br /&gt;
&lt;br /&gt;
==1 Récupération des données==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, si nous avons bien suivi le tutoriel fournis nous avons déjà créée un fichier CSV qui&lt;br /&gt;
rassemble nos donnés. La fonction suivante permet de stocker toute ces informations dans une&lt;br /&gt;
variable en lisant le contenu de notre fichier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df = pd.read_csv(nom_fichier)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 2 Création du model ==&lt;br /&gt;
&lt;br /&gt;
Notre but maintenant est de définir le modèle utilisé par l’algorithme Isolation Forest ensuite. Cela&lt;br /&gt;
reviens à créer un objet contenant tous les paramètres donc la bibliothèque a besoin pour fonctionner.&lt;br /&gt;
&lt;br /&gt;
Pour cela vous allez devoir choisir des paramètres suivants vos besoins :&lt;br /&gt;
&lt;br /&gt;
===1) n_estimators===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir le nombre d&#039;estimateurs de base, c&#039;est-à-dire le nombre d&#039;arbres qui seront&lt;br /&gt;
construits dans la forêt.&lt;br /&gt;
&lt;br /&gt;
Plus le nombre d’arbre est élevé plus l’algorithme est fiable car les moyennes souffrirons moins des&lt;br /&gt;
valeurs écartées mais ces calculs prennent du temps et son couteux c’est pour cela qu’un nombre trop&lt;br /&gt;
élevé d’arbre serait du « gâchis » car la plupart du temps ils n’apportent rien car les anomalies étaient&lt;br /&gt;
déjà isolées avec moins d’arbres.&lt;br /&gt;
&lt;br /&gt;
On considère que 100 arbres sont suffisants pour quasiment toutes les applications courantes de&lt;br /&gt;
recherche d’anomalies c’est d’ailleurs la valeur par défaut.&lt;br /&gt;
&lt;br /&gt;
===2)max_samples===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir l’échantillon max soit le nombre d&#039;échantillons à tirer pour former chaque&lt;br /&gt;
estimateur de base.&lt;br /&gt;
&lt;br /&gt;
En effet lorsque l’on crée un arbre, surtout quand nous avons une grande banque de donnée nous&lt;br /&gt;
n’utilisons pas forcément tous les éléments de la base de donnée pour chaque arbres. Un échantillon&lt;br /&gt;
est créé pour n’utiliser que certaines données.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez changer cette valeur pour une valeur inferieur à 256 et aux nombres d’éléments dans&lt;br /&gt;
votre base de donnée si vous avez vraiment une contraintes de nombre d’opération à effectuer mais&lt;br /&gt;
celle si altèrera rapidement la qualité des résultats.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez mettre une valeur au dessus de 256 si votre base de donnée contient plus de 256&lt;br /&gt;
éléments et que vous n’avez pas peur d’une perte de rapidité et d’optimisation pour avoir un résultat&lt;br /&gt;
plus précis.&lt;br /&gt;
&lt;br /&gt;
Il est tout de même conseillé de laisser ce paramètre en paramétrage automatique celui-ci choisira la&lt;br /&gt;
valeur min(256, n_samples) qui pour la plupart des application est nettement appropriée.&lt;br /&gt;
Le programme créera donc un nombre correspondant d’échantillons qui seront utilisés pour créer&lt;br /&gt;
chaque arbres.&lt;br /&gt;
&lt;br /&gt;
===3) Contamination===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est le plus sensible et le plus délicat à choisir. Le taux de contamination est la proportion&lt;br /&gt;
d’anomalies attendues dans la base de données.&lt;br /&gt;
&lt;br /&gt;
Ce dernier est utilisé lors de l&#039;ajustement pour définir le seuil sur les scores des échantillons. Il est&lt;br /&gt;
essentiel car si nous affirmons une valeur pour ce paramètre le code nous donneras un nombre de&lt;br /&gt;
valeur anormales correspondant. Par exemple si nous entrons contamination=float(0.2) le programme&lt;br /&gt;
nous fournira 20% de valeurs aberrantes même si les scores d’anomalies en révèle plus ou moins.&lt;br /&gt;
La valeur par défaut est &#039;auto&#039;. Si &#039;auto&#039;, la valeur seuil sera déterminée comme dans l&#039;article original&lt;br /&gt;
d&#039;Isolation Forest.&lt;br /&gt;
&lt;br /&gt;
Si nous connaissons cette valeur en revanche par exemple si nous savons d’avance que nous voulons&lt;br /&gt;
enlever 10% des valeurs qui sont trop éloignées des autres nous pouvons l’indiquer tout en sachant&lt;br /&gt;
qu’elle est comprise entre (0, 0.5]&lt;br /&gt;
&lt;br /&gt;
===4) max_features ===&lt;br /&gt;
&lt;br /&gt;
Comme nous l’avons vu dans l’explication du principe de isolation forest, l’algorithme va créer&lt;br /&gt;
des séparations parmi les données jusqu’à isoler les différents éléments.&lt;br /&gt;
Or il n’est pas forcements nécessaire de continuer de créer des séparations jusqu’à ce que&lt;br /&gt;
tous les éléments de la base de données soit isolés. En effet comme nous avons vu les&lt;br /&gt;
éléments les plus difficiles à isoler ne sont pas ceux qui sont considérés comme anormal. Le&lt;br /&gt;
nombre de séparation créées peut donc être paramétré pour optimiser l’algorithme.&lt;br /&gt;
&lt;br /&gt;
La valeur par défaut est 1.0, on peut prendre une valeur différente mais cette dernière doit être&lt;br /&gt;
inferieur à 1.&lt;br /&gt;
&lt;br /&gt;
===5) bootstrap===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen, si on entre la valeur ‘Vrai’ cela indique que les tirages&lt;br /&gt;
d’échantillonnage pour chaque arbre est effectué avec remise, si ce paramètre est ‘Faux’ cela indique&lt;br /&gt;
cela indique que l’échantillonnage est fait sans remise.&lt;br /&gt;
Le réglage par défaut est False.&lt;br /&gt;
&lt;br /&gt;
===6) n_jobs===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre permet de définir le nombre de tâche à exécuter en parallèle pour l’utilisation des&lt;br /&gt;
fonction fit et predict que nous expliquons plus loin.&lt;br /&gt;
Il n’est pas utile de se soucier de ce paramètre à moins que nous ayons une dataset de très très&lt;br /&gt;
grande taille.&lt;br /&gt;
&lt;br /&gt;
Si sa valeur est ‘none’ une seule tâche est effectuée à la fois, si sa valeur est ‘-1’ le programme&lt;br /&gt;
utilisera alors tout le processeur disponible.&lt;br /&gt;
&lt;br /&gt;
===7) random_state===&lt;br /&gt;
Ce paramètre contrôle le caractère pseudo-aléatoire de l’échantillonnage et du choix des splits, pour&lt;br /&gt;
chaque étape de création d’arbre.&lt;br /&gt;
C’est un entier qui suivant sa valeur appellera les fonctions si dessous plusieurs fois afin de faire des&lt;br /&gt;
moyennes des résultats pour accroire le caractère aléatoire des tirages faits.&lt;br /&gt;
&lt;br /&gt;
===8) warm_start===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen qui si il est paramétrer sur Vrai, réutilise la solution de l&#039;appel&lt;br /&gt;
précédent pour s&#039;adapter et rajoute seulement des estimateur dans l’ensemble. Si le paramètre&lt;br /&gt;
est Faux une toute nouvelle forêt est créée.&lt;br /&gt;
Ce paramètre peut être utile si vous utilisez une très grande base de donée et que vous pensez&lt;br /&gt;
qu’une précision supplémentaire est nécessaire.&lt;br /&gt;
&lt;br /&gt;
Les paramètres conseillés sont les suivants :&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;, contamination= »auto »&lt;br /&gt;
,max_features=1.0, bootstrap=False, n_jobs=’None’, random_state=None,&lt;br /&gt;
warm_start=False)&lt;br /&gt;
&lt;br /&gt;
== Utilisation du model==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons défini le modèle avec lequel nous voulons travailler nous devons l’utiliser&lt;br /&gt;
pour l’appliquer à nos données.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous allons utiliser la fonction fit qui va ajuster le modèle sur les données. En d’autres mots&lt;br /&gt;
cette fonction crée tous les arbres de la forêt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.fit(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous utilisons ensuite la fonction decision_function qui va trouver le score d&#039;anomalie de chaque&lt;br /&gt;
éléments en étudiants pour chacun leurs positions dans tout les arbres créés précédemment. Elle va&lt;br /&gt;
donc calculer le score d&#039;anomalie moyen de X des classificateurs de base.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.decision_function(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
La fonction predict va ensuite attribuer une valeur a chaque éléments qui indique si cet élément est&lt;br /&gt;
considéré comme normal (valeur 0) ou comme anomalie (-1) .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.predict(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour plus de lisibilité nous plaçons ces deux scores dans notre tableau de données grâce aux fonctions&lt;br /&gt;
suivantes :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finalement nous cherchons un affichage correcte des résultats et pour cela nous isolons toute les&lt;br /&gt;
lignes correspondants à des anomalies pour les mettre dans un tableau séparé. Nous en profitons pour&lt;br /&gt;
isoler les index des anomalies dans une variable qui pourrait nous être utile plus tard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et pour terminer nous affichons les lignes correspondants aux anomalies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour visualiser les erreurs nous pouvons utiliser le code suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;# valeur à entrer&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var1 = &#039;’&lt;br /&gt;
&lt;br /&gt;
var2 = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pred_scores = -1*model.score_samples(df)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(df[[var1]],df[[var2]], c=pred_scores, cmap=&#039;RdBu&#039;)&lt;br /&gt;
&lt;br /&gt;
plt.colorbar(label=&#039;Simplified Anomaly Score&#039;)&lt;br /&gt;
&lt;br /&gt;
show()&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez choisir les deux noms des colonnes des variables que vous voulez choisir comme abscisse et&lt;br /&gt;
ordonnées de votre graphique.&lt;br /&gt;
Cet affichage permet de visualiser l’ensemble des données ainsi que leurs score d’anomalies associé.&lt;br /&gt;
Cet affichages est très révélateur pour les base de données de dimensions 2 voire 3 mais pour les&lt;br /&gt;
dimensions plus élevées cet affichage perd de son intérêt.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13968</id>
		<title>Wiki tuto</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13968"/>
		<updated>2022-05-27T17:24:03Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* 4.3 Utilisation du model */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutoriel d’utilisation de l’algorithme Isolation forest&lt;br /&gt;
&lt;br /&gt;
Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra&lt;br /&gt;
comment utiliser facilement cet algorithme pour analyser votre propre banque de données. Il vous&lt;br /&gt;
fournira le code nécessaire mais aussi vous expliquera quels paramètres modifier si vous souhaitez&lt;br /&gt;
modifier le code pour l’adapter à vos besoins.&lt;br /&gt;
&lt;br /&gt;
=1 ) Tutoriel=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce tutoriel correctement il faut créer un fichier .py par exemple où on copie toute les&lt;br /&gt;
parties entre barres.&lt;br /&gt;
&lt;br /&gt;
==1 Formatage des données==&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord vous devez formater vos données afin qu&#039;elles soient compatibles avec la suite de&lt;br /&gt;
ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Pour cela créez un tableau sur excel ou autre tableur. La première colonne est l&#039;identifiant qui&lt;br /&gt;
vous permettra d&#039;identifier rapidement les anomalies qui vous seront indiquées, peut être le&lt;br /&gt;
numéro de la ligne par exemple.&lt;br /&gt;
&lt;br /&gt;
Ensuite chaque colonne dont on mettra le titre en ligne 1 contiendra les valeurs d&#039;une&lt;br /&gt;
caractéristique pour chaque élément de la base de données.&lt;br /&gt;
Finalement, enregistrez ce document sous le format cvs séparé par des virgules dans un&lt;br /&gt;
dossier de votre choix.&lt;br /&gt;
&lt;br /&gt;
==2 Import des bibliothèques==&lt;br /&gt;
&lt;br /&gt;
Vous devez maintenant créer un fichier dans le MEME dossier que celui où vous avez mis votre&lt;br /&gt;
dataset. Ce fichier est celui où nous allons écrire le programme une extension .py est donc conseillée.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de l’algorithme comme nous l’avons vu plus haut est assez complexe mais&lt;br /&gt;
heureusement des bibliothèque assez simplifiée ont étés crées ce qui va nous simplifier grandement&lt;br /&gt;
la tâche. Malheureusement ceci peut aussi nous désavantager car les seules fonctions qui sont&lt;br /&gt;
données sont très opaque et ne laisse peut de place à la compréhension du code interne et à la&lt;br /&gt;
modification de ce dernier. C’est pour cela que nous allons essayer de nous concentrer sur la&lt;br /&gt;
compréhension des arguments que nous donnons aux fonctions que nous allons utiliser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;import numpy as np&lt;br /&gt;
&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
from sklearn.ensemble import IsolationForest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous voulez trouver les anomalies en prenant en compte une seule variable de votre base de&lt;br /&gt;
donnez suivez la partie : &amp;quot;Recherche anomalie pour une seule variable&amp;quot;. Si vous voulez connaitre&lt;br /&gt;
les annomalies en prenant en comptes toutes les variables entrées dans votre documents csv&lt;br /&gt;
suivez la partie : &amp;quot;Recherche anomalie pour toute les variable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==3 Recherche anomalie pour toute les variables¶==&lt;br /&gt;
&lt;br /&gt;
Dans cette section nous prenons en compte toute les variables entrées pour les éléments de notre&lt;br /&gt;
dataset.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
df = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
df_modif = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
model.fit(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&lt;br /&gt;
anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la première ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset.&lt;br /&gt;
&lt;br /&gt;
==3 BIS Recherche anomalie pour une seule variable==&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez savoir qu’elles sont les valeurs anormales pour une seule variables, par exemple ne&lt;br /&gt;
prendre en compte que la variable de l’age dans une certaine population, il faut utiliser le code&lt;br /&gt;
suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
nom_variable =&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Reste du code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.fit(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;df[&#039;scores&#039;]=model.decision_function(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
df[&#039;anomaly&#039;]=model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anomaly=df.loc[df[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la premiere ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset. Ainsi que le titre de la colonne de la variable que&lt;br /&gt;
vous voulez prendre en compte dans nom_variable.&lt;br /&gt;
&lt;br /&gt;
==4 Utiliser les résultats==&lt;br /&gt;
&lt;br /&gt;
Lancez le programme. Ce dernier va vous affichez les valeurs dites anormales. Vous pouvez&lt;br /&gt;
ensuite agir sur ces dernières en utilisant la variable anomaly_index qui est un tableau qui&lt;br /&gt;
contient tous les indices des anomalies détectées.&lt;br /&gt;
&lt;br /&gt;
=2)Explication plus précise du code=&lt;br /&gt;
&lt;br /&gt;
Voici une explication plus précise de chaque fonction utilisée dans le code donné dans le tuto.&lt;br /&gt;
&lt;br /&gt;
==1 Récupération des données==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, si nous avons bien suivi le tutoriel fournis nous avons déjà créée un fichier CSV qui&lt;br /&gt;
rassemble nos donnés. La fonction suivante permet de stocker toute ces informations dans une&lt;br /&gt;
variable en lisant le contenu de notre fichier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df = pd.read_csv(nom_fichier)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 2 Création du model ==&lt;br /&gt;
&lt;br /&gt;
Notre but maintenant est de définir le modèle utilisé par l’algorithme Isolation Forest ensuite. Cela&lt;br /&gt;
reviens à créer un objet contenant tous les paramètres donc la bibliothèque a besoin pour fonctionner.&lt;br /&gt;
&lt;br /&gt;
Pour cela vous allez devoir choisir des paramètres suivants vos besoins :&lt;br /&gt;
&lt;br /&gt;
===1) n_estimators===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir le nombre d&#039;estimateurs de base, c&#039;est-à-dire le nombre d&#039;arbres qui seront&lt;br /&gt;
construits dans la forêt.&lt;br /&gt;
&lt;br /&gt;
Plus le nombre d’arbre est élevé plus l’algorithme est fiable car les moyennes souffrirons moins des&lt;br /&gt;
valeurs écartées mais ces calculs prennent du temps et son couteux c’est pour cela qu’un nombre trop&lt;br /&gt;
élevé d’arbre serait du « gâchis » car la plupart du temps ils n’apportent rien car les anomalies étaient&lt;br /&gt;
déjà isolées avec moins d’arbres.&lt;br /&gt;
&lt;br /&gt;
On considère que 100 arbres sont suffisants pour quasiment toutes les applications courantes de&lt;br /&gt;
recherche d’anomalies c’est d’ailleurs la valeur par défaut.&lt;br /&gt;
&lt;br /&gt;
===2)max_samples===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir l’échantillon max soit le nombre d&#039;échantillons à tirer pour former chaque&lt;br /&gt;
estimateur de base.&lt;br /&gt;
&lt;br /&gt;
En effet lorsque l’on crée un arbre, surtout quand nous avons une grande banque de donnée nous&lt;br /&gt;
n’utilisons pas forcément tous les éléments de la base de donnée pour chaque arbres. Un échantillon&lt;br /&gt;
est créé pour n’utiliser que certaines données.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez changer cette valeur pour une valeur inferieur à 256 et aux nombres d’éléments dans&lt;br /&gt;
votre base de donnée si vous avez vraiment une contraintes de nombre d’opération à effectuer mais&lt;br /&gt;
celle si altèrera rapidement la qualité des résultats.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez mettre une valeur au dessus de 256 si votre base de donnée contient plus de 256&lt;br /&gt;
éléments et que vous n’avez pas peur d’une perte de rapidité et d’optimisation pour avoir un résultat&lt;br /&gt;
plus précis.&lt;br /&gt;
&lt;br /&gt;
Il est tout de même conseillé de laisser ce paramètre en paramétrage automatique celui-ci choisira la&lt;br /&gt;
valeur min(256, n_samples) qui pour la plupart des application est nettement appropriée.&lt;br /&gt;
Le programme créera donc un nombre correspondant d’échantillons qui seront utilisés pour créer&lt;br /&gt;
chaque arbres.&lt;br /&gt;
&lt;br /&gt;
===3) Contamination===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est le plus sensible et le plus délicat à choisir. Le taux de contamination est la proportion&lt;br /&gt;
d’anomalies attendues dans la base de données.&lt;br /&gt;
&lt;br /&gt;
Ce dernier est utilisé lors de l&#039;ajustement pour définir le seuil sur les scores des échantillons. Il est&lt;br /&gt;
essentiel car si nous affirmons une valeur pour ce paramètre le code nous donneras un nombre de&lt;br /&gt;
valeur anormales correspondant. Par exemple si nous entrons contamination=float(0.2) le programme&lt;br /&gt;
nous fournira 20% de valeurs aberrantes même si les scores d’anomalies en révèle plus ou moins.&lt;br /&gt;
La valeur par défaut est &#039;auto&#039;. Si &#039;auto&#039;, la valeur seuil sera déterminée comme dans l&#039;article original&lt;br /&gt;
d&#039;Isolation Forest.&lt;br /&gt;
&lt;br /&gt;
Si nous connaissons cette valeur en revanche par exemple si nous savons d’avance que nous voulons&lt;br /&gt;
enlever 10% des valeurs qui sont trop éloignées des autres nous pouvons l’indiquer tout en sachant&lt;br /&gt;
qu’elle est comprise entre (0, 0.5]&lt;br /&gt;
&lt;br /&gt;
===4) max_features ===&lt;br /&gt;
&lt;br /&gt;
Comme nous l’avons vu dans l’explication du principe de isolation forest, l’algorithme va créer&lt;br /&gt;
des séparations parmi les données jusqu’à isoler les différents éléments.&lt;br /&gt;
Or il n’est pas forcements nécessaire de continuer de créer des séparations jusqu’à ce que&lt;br /&gt;
tous les éléments de la base de données soit isolés. En effet comme nous avons vu les&lt;br /&gt;
éléments les plus difficiles à isoler ne sont pas ceux qui sont considérés comme anormal. Le&lt;br /&gt;
nombre de séparation créées peut donc être paramétré pour optimiser l’algorithme.&lt;br /&gt;
&lt;br /&gt;
La valeur par défaut est 1.0, on peut prendre une valeur différente mais cette dernière doit être&lt;br /&gt;
inferieur à 1.&lt;br /&gt;
&lt;br /&gt;
===5) bootstrap===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen, si on entre la valeur ‘Vrai’ cela indique que les tirages&lt;br /&gt;
d’échantillonnage pour chaque arbre est effectué avec remise, si ce paramètre est ‘Faux’ cela indique&lt;br /&gt;
cela indique que l’échantillonnage est fait sans remise.&lt;br /&gt;
Le réglage par défaut est False.&lt;br /&gt;
&lt;br /&gt;
===6) n_jobs===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre permet de définir le nombre de tâche à exécuter en parallèle pour l’utilisation des&lt;br /&gt;
fonction fit et predict que nous expliquons plus loin.&lt;br /&gt;
Il n’est pas utile de se soucier de ce paramètre à moins que nous ayons une dataset de très très&lt;br /&gt;
grande taille.&lt;br /&gt;
&lt;br /&gt;
Si sa valeur est ‘none’ une seule tâche est effectuée à la fois, si sa valeur est ‘-1’ le programme&lt;br /&gt;
utilisera alors tout le processeur disponible.&lt;br /&gt;
&lt;br /&gt;
===7) random_state===&lt;br /&gt;
Ce paramètre contrôle le caractère pseudo-aléatoire de l’échantillonnage et du choix des splits, pour&lt;br /&gt;
chaque étape de création d’arbre.&lt;br /&gt;
C’est un entier qui suivant sa valeur appellera les fonctions si dessous plusieurs fois afin de faire des&lt;br /&gt;
moyennes des résultats pour accroire le caractère aléatoire des tirages faits.&lt;br /&gt;
&lt;br /&gt;
===8) warm_start===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen qui si il est paramétrer sur Vrai, réutilise la solution de l&#039;appel&lt;br /&gt;
précédent pour s&#039;adapter et rajoute seulement des estimateur dans l’ensemble. Si le paramètre&lt;br /&gt;
est Faux une toute nouvelle forêt est créée.&lt;br /&gt;
Ce paramètre peut être utile si vous utilisez une très grande base de donée et que vous pensez&lt;br /&gt;
qu’une précision supplémentaire est nécessaire.&lt;br /&gt;
&lt;br /&gt;
Les paramètres conseillés sont les suivants :&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;, contamination= »auto »&lt;br /&gt;
,max_features=1.0, bootstrap=False, n_jobs=’None’, random_state=None,&lt;br /&gt;
warm_start=False)&lt;br /&gt;
&lt;br /&gt;
===4.3 Utilisation du model===&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons défini le modèle avec lequel nous voulons travailler nous devons l’utiliser&lt;br /&gt;
pour l’appliquer à nos données.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous allons utiliser la fonction fit qui va ajuster le modèle sur les données. En d’autres mots&lt;br /&gt;
cette fonction crée tous les arbres de la forêt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.fit(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous utilisons ensuite la fonction decision_function qui va trouver le score d&#039;anomalie de chaque&lt;br /&gt;
éléments en étudiants pour chacun leurs positions dans tout les arbres créés précédemment. Elle va&lt;br /&gt;
donc calculer le score d&#039;anomalie moyen de X des classificateurs de base.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.decision_function(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
La fonction predict va ensuite attribuer une valeur a chaque éléments qui indique si cet élément est&lt;br /&gt;
considéré comme normal (valeur 0) ou comme anomalie (-1) .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.predict(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour plus de lisibilité nous plaçons ces deux scores dans notre tableau de données grâce aux fonctions&lt;br /&gt;
suivantes :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Finalement nous cherchons un affichage correcte des résultats et pour cela nous isolons toute les&lt;br /&gt;
lignes correspondants à des anomalies pour les mettre dans un tableau séparé. Nous en profitons pour&lt;br /&gt;
isoler les index des anomalies dans une variable qui pourrait nous être utile plus tard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et pour terminer nous affichons les lignes correspondants aux anomalies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour visualiser les erreurs nous pouvons utiliser le code suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;# valeur à entrer&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var1 = &#039;’&lt;br /&gt;
&lt;br /&gt;
var2 = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pred_scores = -1*model.score_samples(df)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(df[[var1]],df[[var2]], c=pred_scores, cmap=&#039;RdBu&#039;)&lt;br /&gt;
&lt;br /&gt;
plt.colorbar(label=&#039;Simplified Anomaly Score&#039;)&lt;br /&gt;
&lt;br /&gt;
show()&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez choisir les deux noms des colonnes des variables que vous voulez choisir comme abscisse et&lt;br /&gt;
ordonnées de votre graphique&lt;br /&gt;
Cet affichage permet de visualiser l’ensemble des données ainsi que leurs score d’anomalies associé.&lt;br /&gt;
Cet affichages est très révélateur pour les base de données de dimensions 2 voire 3 mais pour les&lt;br /&gt;
dimensions plus élevées cet affichage perd de son intérêt.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13967</id>
		<title>Wiki tuto</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13967"/>
		<updated>2022-05-27T17:23:18Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* 4.3 Utilisation du model */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutoriel d’utilisation de l’algorithme Isolation forest&lt;br /&gt;
&lt;br /&gt;
Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra&lt;br /&gt;
comment utiliser facilement cet algorithme pour analyser votre propre banque de données. Il vous&lt;br /&gt;
fournira le code nécessaire mais aussi vous expliquera quels paramètres modifier si vous souhaitez&lt;br /&gt;
modifier le code pour l’adapter à vos besoins.&lt;br /&gt;
&lt;br /&gt;
=1 ) Tutoriel=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce tutoriel correctement il faut créer un fichier .py par exemple où on copie toute les&lt;br /&gt;
parties entre barres.&lt;br /&gt;
&lt;br /&gt;
==1 Formatage des données==&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord vous devez formater vos données afin qu&#039;elles soient compatibles avec la suite de&lt;br /&gt;
ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Pour cela créez un tableau sur excel ou autre tableur. La première colonne est l&#039;identifiant qui&lt;br /&gt;
vous permettra d&#039;identifier rapidement les anomalies qui vous seront indiquées, peut être le&lt;br /&gt;
numéro de la ligne par exemple.&lt;br /&gt;
&lt;br /&gt;
Ensuite chaque colonne dont on mettra le titre en ligne 1 contiendra les valeurs d&#039;une&lt;br /&gt;
caractéristique pour chaque élément de la base de données.&lt;br /&gt;
Finalement, enregistrez ce document sous le format cvs séparé par des virgules dans un&lt;br /&gt;
dossier de votre choix.&lt;br /&gt;
&lt;br /&gt;
==2 Import des bibliothèques==&lt;br /&gt;
&lt;br /&gt;
Vous devez maintenant créer un fichier dans le MEME dossier que celui où vous avez mis votre&lt;br /&gt;
dataset. Ce fichier est celui où nous allons écrire le programme une extension .py est donc conseillée.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de l’algorithme comme nous l’avons vu plus haut est assez complexe mais&lt;br /&gt;
heureusement des bibliothèque assez simplifiée ont étés crées ce qui va nous simplifier grandement&lt;br /&gt;
la tâche. Malheureusement ceci peut aussi nous désavantager car les seules fonctions qui sont&lt;br /&gt;
données sont très opaque et ne laisse peut de place à la compréhension du code interne et à la&lt;br /&gt;
modification de ce dernier. C’est pour cela que nous allons essayer de nous concentrer sur la&lt;br /&gt;
compréhension des arguments que nous donnons aux fonctions que nous allons utiliser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;import numpy as np&lt;br /&gt;
&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
from sklearn.ensemble import IsolationForest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous voulez trouver les anomalies en prenant en compte une seule variable de votre base de&lt;br /&gt;
donnez suivez la partie : &amp;quot;Recherche anomalie pour une seule variable&amp;quot;. Si vous voulez connaitre&lt;br /&gt;
les annomalies en prenant en comptes toutes les variables entrées dans votre documents csv&lt;br /&gt;
suivez la partie : &amp;quot;Recherche anomalie pour toute les variable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==3 Recherche anomalie pour toute les variables¶==&lt;br /&gt;
&lt;br /&gt;
Dans cette section nous prenons en compte toute les variables entrées pour les éléments de notre&lt;br /&gt;
dataset.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
df = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
df_modif = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
model.fit(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&lt;br /&gt;
anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la première ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset.&lt;br /&gt;
&lt;br /&gt;
==3 BIS Recherche anomalie pour une seule variable==&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez savoir qu’elles sont les valeurs anormales pour une seule variables, par exemple ne&lt;br /&gt;
prendre en compte que la variable de l’age dans une certaine population, il faut utiliser le code&lt;br /&gt;
suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
nom_variable =&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Reste du code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.fit(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;df[&#039;scores&#039;]=model.decision_function(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
df[&#039;anomaly&#039;]=model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anomaly=df.loc[df[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la premiere ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset. Ainsi que le titre de la colonne de la variable que&lt;br /&gt;
vous voulez prendre en compte dans nom_variable.&lt;br /&gt;
&lt;br /&gt;
==4 Utiliser les résultats==&lt;br /&gt;
&lt;br /&gt;
Lancez le programme. Ce dernier va vous affichez les valeurs dites anormales. Vous pouvez&lt;br /&gt;
ensuite agir sur ces dernières en utilisant la variable anomaly_index qui est un tableau qui&lt;br /&gt;
contient tous les indices des anomalies détectées.&lt;br /&gt;
&lt;br /&gt;
=2)Explication plus précise du code=&lt;br /&gt;
&lt;br /&gt;
Voici une explication plus précise de chaque fonction utilisée dans le code donné dans le tuto.&lt;br /&gt;
&lt;br /&gt;
==1 Récupération des données==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, si nous avons bien suivi le tutoriel fournis nous avons déjà créée un fichier CSV qui&lt;br /&gt;
rassemble nos donnés. La fonction suivante permet de stocker toute ces informations dans une&lt;br /&gt;
variable en lisant le contenu de notre fichier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df = pd.read_csv(nom_fichier)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 2 Création du model ==&lt;br /&gt;
&lt;br /&gt;
Notre but maintenant est de définir le modèle utilisé par l’algorithme Isolation Forest ensuite. Cela&lt;br /&gt;
reviens à créer un objet contenant tous les paramètres donc la bibliothèque a besoin pour fonctionner.&lt;br /&gt;
&lt;br /&gt;
Pour cela vous allez devoir choisir des paramètres suivants vos besoins :&lt;br /&gt;
&lt;br /&gt;
===1) n_estimators===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir le nombre d&#039;estimateurs de base, c&#039;est-à-dire le nombre d&#039;arbres qui seront&lt;br /&gt;
construits dans la forêt.&lt;br /&gt;
&lt;br /&gt;
Plus le nombre d’arbre est élevé plus l’algorithme est fiable car les moyennes souffrirons moins des&lt;br /&gt;
valeurs écartées mais ces calculs prennent du temps et son couteux c’est pour cela qu’un nombre trop&lt;br /&gt;
élevé d’arbre serait du « gâchis » car la plupart du temps ils n’apportent rien car les anomalies étaient&lt;br /&gt;
déjà isolées avec moins d’arbres.&lt;br /&gt;
&lt;br /&gt;
On considère que 100 arbres sont suffisants pour quasiment toutes les applications courantes de&lt;br /&gt;
recherche d’anomalies c’est d’ailleurs la valeur par défaut.&lt;br /&gt;
&lt;br /&gt;
===2)max_samples===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir l’échantillon max soit le nombre d&#039;échantillons à tirer pour former chaque&lt;br /&gt;
estimateur de base.&lt;br /&gt;
&lt;br /&gt;
En effet lorsque l’on crée un arbre, surtout quand nous avons une grande banque de donnée nous&lt;br /&gt;
n’utilisons pas forcément tous les éléments de la base de donnée pour chaque arbres. Un échantillon&lt;br /&gt;
est créé pour n’utiliser que certaines données.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez changer cette valeur pour une valeur inferieur à 256 et aux nombres d’éléments dans&lt;br /&gt;
votre base de donnée si vous avez vraiment une contraintes de nombre d’opération à effectuer mais&lt;br /&gt;
celle si altèrera rapidement la qualité des résultats.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez mettre une valeur au dessus de 256 si votre base de donnée contient plus de 256&lt;br /&gt;
éléments et que vous n’avez pas peur d’une perte de rapidité et d’optimisation pour avoir un résultat&lt;br /&gt;
plus précis.&lt;br /&gt;
&lt;br /&gt;
Il est tout de même conseillé de laisser ce paramètre en paramétrage automatique celui-ci choisira la&lt;br /&gt;
valeur min(256, n_samples) qui pour la plupart des application est nettement appropriée.&lt;br /&gt;
Le programme créera donc un nombre correspondant d’échantillons qui seront utilisés pour créer&lt;br /&gt;
chaque arbres.&lt;br /&gt;
&lt;br /&gt;
===3) Contamination===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est le plus sensible et le plus délicat à choisir. Le taux de contamination est la proportion&lt;br /&gt;
d’anomalies attendues dans la base de données.&lt;br /&gt;
&lt;br /&gt;
Ce dernier est utilisé lors de l&#039;ajustement pour définir le seuil sur les scores des échantillons. Il est&lt;br /&gt;
essentiel car si nous affirmons une valeur pour ce paramètre le code nous donneras un nombre de&lt;br /&gt;
valeur anormales correspondant. Par exemple si nous entrons contamination=float(0.2) le programme&lt;br /&gt;
nous fournira 20% de valeurs aberrantes même si les scores d’anomalies en révèle plus ou moins.&lt;br /&gt;
La valeur par défaut est &#039;auto&#039;. Si &#039;auto&#039;, la valeur seuil sera déterminée comme dans l&#039;article original&lt;br /&gt;
d&#039;Isolation Forest.&lt;br /&gt;
&lt;br /&gt;
Si nous connaissons cette valeur en revanche par exemple si nous savons d’avance que nous voulons&lt;br /&gt;
enlever 10% des valeurs qui sont trop éloignées des autres nous pouvons l’indiquer tout en sachant&lt;br /&gt;
qu’elle est comprise entre (0, 0.5]&lt;br /&gt;
&lt;br /&gt;
===4) max_features ===&lt;br /&gt;
&lt;br /&gt;
Comme nous l’avons vu dans l’explication du principe de isolation forest, l’algorithme va créer&lt;br /&gt;
des séparations parmi les données jusqu’à isoler les différents éléments.&lt;br /&gt;
Or il n’est pas forcements nécessaire de continuer de créer des séparations jusqu’à ce que&lt;br /&gt;
tous les éléments de la base de données soit isolés. En effet comme nous avons vu les&lt;br /&gt;
éléments les plus difficiles à isoler ne sont pas ceux qui sont considérés comme anormal. Le&lt;br /&gt;
nombre de séparation créées peut donc être paramétré pour optimiser l’algorithme.&lt;br /&gt;
&lt;br /&gt;
La valeur par défaut est 1.0, on peut prendre une valeur différente mais cette dernière doit être&lt;br /&gt;
inferieur à 1.&lt;br /&gt;
&lt;br /&gt;
===5) bootstrap===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen, si on entre la valeur ‘Vrai’ cela indique que les tirages&lt;br /&gt;
d’échantillonnage pour chaque arbre est effectué avec remise, si ce paramètre est ‘Faux’ cela indique&lt;br /&gt;
cela indique que l’échantillonnage est fait sans remise.&lt;br /&gt;
Le réglage par défaut est False.&lt;br /&gt;
&lt;br /&gt;
===6) n_jobs===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre permet de définir le nombre de tâche à exécuter en parallèle pour l’utilisation des&lt;br /&gt;
fonction fit et predict que nous expliquons plus loin.&lt;br /&gt;
Il n’est pas utile de se soucier de ce paramètre à moins que nous ayons une dataset de très très&lt;br /&gt;
grande taille.&lt;br /&gt;
&lt;br /&gt;
Si sa valeur est ‘none’ une seule tâche est effectuée à la fois, si sa valeur est ‘-1’ le programme&lt;br /&gt;
utilisera alors tout le processeur disponible.&lt;br /&gt;
&lt;br /&gt;
===7) random_state===&lt;br /&gt;
Ce paramètre contrôle le caractère pseudo-aléatoire de l’échantillonnage et du choix des splits, pour&lt;br /&gt;
chaque étape de création d’arbre.&lt;br /&gt;
C’est un entier qui suivant sa valeur appellera les fonctions si dessous plusieurs fois afin de faire des&lt;br /&gt;
moyennes des résultats pour accroire le caractère aléatoire des tirages faits.&lt;br /&gt;
&lt;br /&gt;
===8) warm_start===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen qui si il est paramétrer sur Vrai, réutilise la solution de l&#039;appel&lt;br /&gt;
précédent pour s&#039;adapter et rajoute seulement des estimateur dans l’ensemble. Si le paramètre&lt;br /&gt;
est Faux une toute nouvelle forêt est créée.&lt;br /&gt;
Ce paramètre peut être utile si vous utilisez une très grande base de donée et que vous pensez&lt;br /&gt;
qu’une précision supplémentaire est nécessaire.&lt;br /&gt;
&lt;br /&gt;
Les paramètres conseillés sont les suivants :&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;, contamination= »auto »&lt;br /&gt;
,max_features=1.0, bootstrap=False, n_jobs=’None’, random_state=None,&lt;br /&gt;
warm_start=False)&lt;br /&gt;
&lt;br /&gt;
===4.3 Utilisation du model===&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons défini le modèle avec lequel nous voulons travailler nous devons l’utiliser&lt;br /&gt;
pour l’appliquer à nos données.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous allons utiliser la fonction fit qui va ajuster le modèle sur les données. En d’autres mots&lt;br /&gt;
cette fonction crée tous les arbres de la forêt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.fit(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous utilisons ensuite la fonction decision_function qui va trouver le score d&#039;anomalie de chaque&lt;br /&gt;
éléments en étudiants pour chacun leurs positions dans tout les arbres créés précédemment. Elle va&lt;br /&gt;
donc calculer le score d&#039;anomalie moyen de X des classificateurs de base.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.decision_function(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
La fonction predict va ensuite attribuer une valeur a chaque éléments qui indique si cet élément est&lt;br /&gt;
considéré comme normal (valeur 0) ou comme anomalie (-1) .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.predict(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour plus de lisibilité nous plaçons ces deux scores dans notre tableau de données grâce aux fonctions&lt;br /&gt;
suivantes :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
Finalement nous cherchons un affichage correcte des résultats et pour cela nous isolons toute les&lt;br /&gt;
lignes correspondants à des anomalies pour les mettre dans un tableau séparé. Nous en profitons pour&lt;br /&gt;
isoler les index des anomalies dans une variable qui pourrait nous être utile plus tard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et pour terminer nous affichons les lignes correspondants aux anomalies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour visualiser les erreurs nous pouvons utiliser le code suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;lt;nowiki&amp;gt;# valeur à entrer&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var1 = &#039;’&lt;br /&gt;
&lt;br /&gt;
var2 = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
pred_scores = -1*model.score_samples(df)&lt;br /&gt;
&lt;br /&gt;
plt.scatter(df[[var1]],df[[var2]], c=pred_scores, cmap=&#039;RdBu&#039;)&lt;br /&gt;
&lt;br /&gt;
plt.colorbar(label=&#039;Simplified Anomaly Score&#039;)&lt;br /&gt;
&lt;br /&gt;
show()&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez choisir les deux noms des colonnes des variables que vous voulez choisir comme abscisse et&lt;br /&gt;
ordonnées de votre graphique&lt;br /&gt;
Cet affichage permet de visualiser l’ensemble des données ainsi que leurs score d’anomalies associé.&lt;br /&gt;
Cet affichages est très révélateur pour les base de données de dimensions 2 voire 3 mais pour les&lt;br /&gt;
dimensions plus élevées cet affichage perd de son intérêt.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13966</id>
		<title>Wiki tuto</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13966"/>
		<updated>2022-05-27T17:22:35Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* 3 BIS Recherche anomalie pour une seule variable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutoriel d’utilisation de l’algorithme Isolation forest&lt;br /&gt;
&lt;br /&gt;
Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra&lt;br /&gt;
comment utiliser facilement cet algorithme pour analyser votre propre banque de données. Il vous&lt;br /&gt;
fournira le code nécessaire mais aussi vous expliquera quels paramètres modifier si vous souhaitez&lt;br /&gt;
modifier le code pour l’adapter à vos besoins.&lt;br /&gt;
&lt;br /&gt;
=1 ) Tutoriel=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce tutoriel correctement il faut créer un fichier .py par exemple où on copie toute les&lt;br /&gt;
parties entre barres.&lt;br /&gt;
&lt;br /&gt;
==1 Formatage des données==&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord vous devez formater vos données afin qu&#039;elles soient compatibles avec la suite de&lt;br /&gt;
ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Pour cela créez un tableau sur excel ou autre tableur. La première colonne est l&#039;identifiant qui&lt;br /&gt;
vous permettra d&#039;identifier rapidement les anomalies qui vous seront indiquées, peut être le&lt;br /&gt;
numéro de la ligne par exemple.&lt;br /&gt;
&lt;br /&gt;
Ensuite chaque colonne dont on mettra le titre en ligne 1 contiendra les valeurs d&#039;une&lt;br /&gt;
caractéristique pour chaque élément de la base de données.&lt;br /&gt;
Finalement, enregistrez ce document sous le format cvs séparé par des virgules dans un&lt;br /&gt;
dossier de votre choix.&lt;br /&gt;
&lt;br /&gt;
==2 Import des bibliothèques==&lt;br /&gt;
&lt;br /&gt;
Vous devez maintenant créer un fichier dans le MEME dossier que celui où vous avez mis votre&lt;br /&gt;
dataset. Ce fichier est celui où nous allons écrire le programme une extension .py est donc conseillée.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de l’algorithme comme nous l’avons vu plus haut est assez complexe mais&lt;br /&gt;
heureusement des bibliothèque assez simplifiée ont étés crées ce qui va nous simplifier grandement&lt;br /&gt;
la tâche. Malheureusement ceci peut aussi nous désavantager car les seules fonctions qui sont&lt;br /&gt;
données sont très opaque et ne laisse peut de place à la compréhension du code interne et à la&lt;br /&gt;
modification de ce dernier. C’est pour cela que nous allons essayer de nous concentrer sur la&lt;br /&gt;
compréhension des arguments que nous donnons aux fonctions que nous allons utiliser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;import numpy as np&lt;br /&gt;
&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
from sklearn.ensemble import IsolationForest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous voulez trouver les anomalies en prenant en compte une seule variable de votre base de&lt;br /&gt;
donnez suivez la partie : &amp;quot;Recherche anomalie pour une seule variable&amp;quot;. Si vous voulez connaitre&lt;br /&gt;
les annomalies en prenant en comptes toutes les variables entrées dans votre documents csv&lt;br /&gt;
suivez la partie : &amp;quot;Recherche anomalie pour toute les variable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==3 Recherche anomalie pour toute les variables¶==&lt;br /&gt;
&lt;br /&gt;
Dans cette section nous prenons en compte toute les variables entrées pour les éléments de notre&lt;br /&gt;
dataset.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
df = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
df_modif = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
model.fit(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&lt;br /&gt;
anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la première ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset.&lt;br /&gt;
&lt;br /&gt;
==3 BIS Recherche anomalie pour une seule variable==&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez savoir qu’elles sont les valeurs anormales pour une seule variables, par exemple ne&lt;br /&gt;
prendre en compte que la variable de l’age dans une certaine population, il faut utiliser le code&lt;br /&gt;
suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
nom_variable =&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Reste du code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.fit(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;df[&#039;scores&#039;]=model.decision_function(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
df[&#039;anomaly&#039;]=model.predict(df[[nom_variable]])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
anomaly=df.loc[df[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la premiere ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset. Ainsi que le titre de la colonne de la variable que&lt;br /&gt;
vous voulez prendre en compte dans nom_variable.&lt;br /&gt;
&lt;br /&gt;
==4 Utiliser les résultats==&lt;br /&gt;
&lt;br /&gt;
Lancez le programme. Ce dernier va vous affichez les valeurs dites anormales. Vous pouvez&lt;br /&gt;
ensuite agir sur ces dernières en utilisant la variable anomaly_index qui est un tableau qui&lt;br /&gt;
contient tous les indices des anomalies détectées.&lt;br /&gt;
&lt;br /&gt;
=2)Explication plus précise du code=&lt;br /&gt;
&lt;br /&gt;
Voici une explication plus précise de chaque fonction utilisée dans le code donné dans le tuto.&lt;br /&gt;
&lt;br /&gt;
==1 Récupération des données==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, si nous avons bien suivi le tutoriel fournis nous avons déjà créée un fichier CSV qui&lt;br /&gt;
rassemble nos donnés. La fonction suivante permet de stocker toute ces informations dans une&lt;br /&gt;
variable en lisant le contenu de notre fichier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df = pd.read_csv(nom_fichier)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 2 Création du model ==&lt;br /&gt;
&lt;br /&gt;
Notre but maintenant est de définir le modèle utilisé par l’algorithme Isolation Forest ensuite. Cela&lt;br /&gt;
reviens à créer un objet contenant tous les paramètres donc la bibliothèque a besoin pour fonctionner.&lt;br /&gt;
&lt;br /&gt;
Pour cela vous allez devoir choisir des paramètres suivants vos besoins :&lt;br /&gt;
&lt;br /&gt;
===1) n_estimators===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir le nombre d&#039;estimateurs de base, c&#039;est-à-dire le nombre d&#039;arbres qui seront&lt;br /&gt;
construits dans la forêt.&lt;br /&gt;
&lt;br /&gt;
Plus le nombre d’arbre est élevé plus l’algorithme est fiable car les moyennes souffrirons moins des&lt;br /&gt;
valeurs écartées mais ces calculs prennent du temps et son couteux c’est pour cela qu’un nombre trop&lt;br /&gt;
élevé d’arbre serait du « gâchis » car la plupart du temps ils n’apportent rien car les anomalies étaient&lt;br /&gt;
déjà isolées avec moins d’arbres.&lt;br /&gt;
&lt;br /&gt;
On considère que 100 arbres sont suffisants pour quasiment toutes les applications courantes de&lt;br /&gt;
recherche d’anomalies c’est d’ailleurs la valeur par défaut.&lt;br /&gt;
&lt;br /&gt;
===2)max_samples===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir l’échantillon max soit le nombre d&#039;échantillons à tirer pour former chaque&lt;br /&gt;
estimateur de base.&lt;br /&gt;
&lt;br /&gt;
En effet lorsque l’on crée un arbre, surtout quand nous avons une grande banque de donnée nous&lt;br /&gt;
n’utilisons pas forcément tous les éléments de la base de donnée pour chaque arbres. Un échantillon&lt;br /&gt;
est créé pour n’utiliser que certaines données.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez changer cette valeur pour une valeur inferieur à 256 et aux nombres d’éléments dans&lt;br /&gt;
votre base de donnée si vous avez vraiment une contraintes de nombre d’opération à effectuer mais&lt;br /&gt;
celle si altèrera rapidement la qualité des résultats.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez mettre une valeur au dessus de 256 si votre base de donnée contient plus de 256&lt;br /&gt;
éléments et que vous n’avez pas peur d’une perte de rapidité et d’optimisation pour avoir un résultat&lt;br /&gt;
plus précis.&lt;br /&gt;
&lt;br /&gt;
Il est tout de même conseillé de laisser ce paramètre en paramétrage automatique celui-ci choisira la&lt;br /&gt;
valeur min(256, n_samples) qui pour la plupart des application est nettement appropriée.&lt;br /&gt;
Le programme créera donc un nombre correspondant d’échantillons qui seront utilisés pour créer&lt;br /&gt;
chaque arbres.&lt;br /&gt;
&lt;br /&gt;
===3) Contamination===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est le plus sensible et le plus délicat à choisir. Le taux de contamination est la proportion&lt;br /&gt;
d’anomalies attendues dans la base de données.&lt;br /&gt;
&lt;br /&gt;
Ce dernier est utilisé lors de l&#039;ajustement pour définir le seuil sur les scores des échantillons. Il est&lt;br /&gt;
essentiel car si nous affirmons une valeur pour ce paramètre le code nous donneras un nombre de&lt;br /&gt;
valeur anormales correspondant. Par exemple si nous entrons contamination=float(0.2) le programme&lt;br /&gt;
nous fournira 20% de valeurs aberrantes même si les scores d’anomalies en révèle plus ou moins.&lt;br /&gt;
La valeur par défaut est &#039;auto&#039;. Si &#039;auto&#039;, la valeur seuil sera déterminée comme dans l&#039;article original&lt;br /&gt;
d&#039;Isolation Forest.&lt;br /&gt;
&lt;br /&gt;
Si nous connaissons cette valeur en revanche par exemple si nous savons d’avance que nous voulons&lt;br /&gt;
enlever 10% des valeurs qui sont trop éloignées des autres nous pouvons l’indiquer tout en sachant&lt;br /&gt;
qu’elle est comprise entre (0, 0.5]&lt;br /&gt;
&lt;br /&gt;
===4) max_features ===&lt;br /&gt;
&lt;br /&gt;
Comme nous l’avons vu dans l’explication du principe de isolation forest, l’algorithme va créer&lt;br /&gt;
des séparations parmi les données jusqu’à isoler les différents éléments.&lt;br /&gt;
Or il n’est pas forcements nécessaire de continuer de créer des séparations jusqu’à ce que&lt;br /&gt;
tous les éléments de la base de données soit isolés. En effet comme nous avons vu les&lt;br /&gt;
éléments les plus difficiles à isoler ne sont pas ceux qui sont considérés comme anormal. Le&lt;br /&gt;
nombre de séparation créées peut donc être paramétré pour optimiser l’algorithme.&lt;br /&gt;
&lt;br /&gt;
La valeur par défaut est 1.0, on peut prendre une valeur différente mais cette dernière doit être&lt;br /&gt;
inferieur à 1.&lt;br /&gt;
&lt;br /&gt;
===5) bootstrap===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen, si on entre la valeur ‘Vrai’ cela indique que les tirages&lt;br /&gt;
d’échantillonnage pour chaque arbre est effectué avec remise, si ce paramètre est ‘Faux’ cela indique&lt;br /&gt;
cela indique que l’échantillonnage est fait sans remise.&lt;br /&gt;
Le réglage par défaut est False.&lt;br /&gt;
&lt;br /&gt;
===6) n_jobs===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre permet de définir le nombre de tâche à exécuter en parallèle pour l’utilisation des&lt;br /&gt;
fonction fit et predict que nous expliquons plus loin.&lt;br /&gt;
Il n’est pas utile de se soucier de ce paramètre à moins que nous ayons une dataset de très très&lt;br /&gt;
grande taille.&lt;br /&gt;
&lt;br /&gt;
Si sa valeur est ‘none’ une seule tâche est effectuée à la fois, si sa valeur est ‘-1’ le programme&lt;br /&gt;
utilisera alors tout le processeur disponible.&lt;br /&gt;
&lt;br /&gt;
===7) random_state===&lt;br /&gt;
Ce paramètre contrôle le caractère pseudo-aléatoire de l’échantillonnage et du choix des splits, pour&lt;br /&gt;
chaque étape de création d’arbre.&lt;br /&gt;
C’est un entier qui suivant sa valeur appellera les fonctions si dessous plusieurs fois afin de faire des&lt;br /&gt;
moyennes des résultats pour accroire le caractère aléatoire des tirages faits.&lt;br /&gt;
&lt;br /&gt;
===8) warm_start===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen qui si il est paramétrer sur Vrai, réutilise la solution de l&#039;appel&lt;br /&gt;
précédent pour s&#039;adapter et rajoute seulement des estimateur dans l’ensemble. Si le paramètre&lt;br /&gt;
est Faux une toute nouvelle forêt est créée.&lt;br /&gt;
Ce paramètre peut être utile si vous utilisez une très grande base de donée et que vous pensez&lt;br /&gt;
qu’une précision supplémentaire est nécessaire.&lt;br /&gt;
&lt;br /&gt;
Les paramètres conseillés sont les suivants :&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;, contamination= »auto »&lt;br /&gt;
,max_features=1.0, bootstrap=False, n_jobs=’None’, random_state=None,&lt;br /&gt;
warm_start=False)&lt;br /&gt;
&lt;br /&gt;
===4.3 Utilisation du model===&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons défini le modèle avec lequel nous voulons travailler nous devons l’utiliser&lt;br /&gt;
pour l’appliquer à nos données.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous allons utiliser la fonction fit qui va ajuster le modèle sur les données. En d’autres mots&lt;br /&gt;
cette fonction crée tous les arbres de la forêt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.fit(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous utilisons ensuite la fonction decision_function qui va trouver le score d&#039;anomalie de chaque&lt;br /&gt;
éléments en étudiants pour chacun leurs positions dans tout les arbres créés précédemment. Elle va&lt;br /&gt;
donc calculer le score d&#039;anomalie moyen de X des classificateurs de base.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.decision_function(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
La fonction predict va ensuite attribuer une valeur a chaque éléments qui indique si cet élément est&lt;br /&gt;
considéré comme normal (valeur 0) ou comme anomalie (-1) .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.predict(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour plus de lisibilité nous plaçons ces deux scores dans notre tableau de données grâce aux fonctions&lt;br /&gt;
suivantes :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
Finalement nous cherchons un affichage correcte des résultats et pour cela nous isolons toute les&lt;br /&gt;
lignes correspondants à des anomalies pour les mettre dans un tableau séparé. Nous en profitons pour&lt;br /&gt;
isoler les index des anomalies dans une variable qui pourrait nous être utile plus tard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
anomaly_index=list(anomaly.index)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et pour terminer nous affichons les lignes correspondants aux anomalies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour visualiser les erreurs nous pouvons utiliser le code suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;# valeur à entrer&lt;br /&gt;
var1 = &#039;’&lt;br /&gt;
var2 = &#039;&#039;&lt;br /&gt;
# Code à ne pas modifier&lt;br /&gt;
pred_scores = -1*model.score_samples(df)&lt;br /&gt;
plt.scatter(df[[var1]],df[[var2]], c=pred_scores, cmap=&#039;RdBu&#039;)&lt;br /&gt;
plt.colorbar(label=&#039;Simplified Anomaly Score&#039;)&lt;br /&gt;
show()&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez choisir les deux noms des colonnes des variables que vous voulez choisir comme abscisse et&lt;br /&gt;
ordonnées de votre graphique&lt;br /&gt;
Cet affichage permet de visualiser l’ensemble des données ainsi que leurs score d’anomalies associé.&lt;br /&gt;
Cet affichages est très révélateur pour les base de données de dimensions 2 voire 3 mais pour les&lt;br /&gt;
dimensions plus élevées cet affichage perd de son intérêt.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13965</id>
		<title>Wiki tuto</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13965"/>
		<updated>2022-05-27T17:21:36Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* 3 BIS Recherche anomalie pour une seule variable */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutoriel d’utilisation de l’algorithme Isolation forest&lt;br /&gt;
&lt;br /&gt;
Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra&lt;br /&gt;
comment utiliser facilement cet algorithme pour analyser votre propre banque de données. Il vous&lt;br /&gt;
fournira le code nécessaire mais aussi vous expliquera quels paramètres modifier si vous souhaitez&lt;br /&gt;
modifier le code pour l’adapter à vos besoins.&lt;br /&gt;
&lt;br /&gt;
=1 ) Tutoriel=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce tutoriel correctement il faut créer un fichier .py par exemple où on copie toute les&lt;br /&gt;
parties entre barres.&lt;br /&gt;
&lt;br /&gt;
==1 Formatage des données==&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord vous devez formater vos données afin qu&#039;elles soient compatibles avec la suite de&lt;br /&gt;
ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Pour cela créez un tableau sur excel ou autre tableur. La première colonne est l&#039;identifiant qui&lt;br /&gt;
vous permettra d&#039;identifier rapidement les anomalies qui vous seront indiquées, peut être le&lt;br /&gt;
numéro de la ligne par exemple.&lt;br /&gt;
&lt;br /&gt;
Ensuite chaque colonne dont on mettra le titre en ligne 1 contiendra les valeurs d&#039;une&lt;br /&gt;
caractéristique pour chaque élément de la base de données.&lt;br /&gt;
Finalement, enregistrez ce document sous le format cvs séparé par des virgules dans un&lt;br /&gt;
dossier de votre choix.&lt;br /&gt;
&lt;br /&gt;
==2 Import des bibliothèques==&lt;br /&gt;
&lt;br /&gt;
Vous devez maintenant créer un fichier dans le MEME dossier que celui où vous avez mis votre&lt;br /&gt;
dataset. Ce fichier est celui où nous allons écrire le programme une extension .py est donc conseillée.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de l’algorithme comme nous l’avons vu plus haut est assez complexe mais&lt;br /&gt;
heureusement des bibliothèque assez simplifiée ont étés crées ce qui va nous simplifier grandement&lt;br /&gt;
la tâche. Malheureusement ceci peut aussi nous désavantager car les seules fonctions qui sont&lt;br /&gt;
données sont très opaque et ne laisse peut de place à la compréhension du code interne et à la&lt;br /&gt;
modification de ce dernier. C’est pour cela que nous allons essayer de nous concentrer sur la&lt;br /&gt;
compréhension des arguments que nous donnons aux fonctions que nous allons utiliser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;import numpy as np&lt;br /&gt;
&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
from sklearn.ensemble import IsolationForest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous voulez trouver les anomalies en prenant en compte une seule variable de votre base de&lt;br /&gt;
donnez suivez la partie : &amp;quot;Recherche anomalie pour une seule variable&amp;quot;. Si vous voulez connaitre&lt;br /&gt;
les annomalies en prenant en comptes toutes les variables entrées dans votre documents csv&lt;br /&gt;
suivez la partie : &amp;quot;Recherche anomalie pour toute les variable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==3 Recherche anomalie pour toute les variables¶==&lt;br /&gt;
&lt;br /&gt;
Dans cette section nous prenons en compte toute les variables entrées pour les éléments de notre&lt;br /&gt;
dataset.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
df = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
df_modif = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
model.fit(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&lt;br /&gt;
anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la première ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset.&lt;br /&gt;
&lt;br /&gt;
==3 BIS Recherche anomalie pour une seule variable==&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez savoir qu’elles sont les valeurs anormales pour une seule variables, par exemple ne&lt;br /&gt;
prendre en compte que la variable de l’age dans une certaine population, il faut utiliser le code&lt;br /&gt;
suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
nom_variable =&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;# Reste du code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
model.fit(df[[nom_variable]])&lt;br /&gt;
&lt;br /&gt;
model.predict(df[[nom_variable]])&lt;br /&gt;
&lt;br /&gt;
df[&#039;scores&#039;]=model.decision_function(df[[nom_variable]])&lt;br /&gt;
&lt;br /&gt;
df[&#039;anomaly&#039;]=model.predict(df[[nom_variable]])&lt;br /&gt;
&lt;br /&gt;
anomaly=df.loc[df[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la premiere ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset. Ainsi que le titre de la colonne de la variable que&lt;br /&gt;
vous voulez prendre en compte dans nom_variable.&lt;br /&gt;
&lt;br /&gt;
==4 Utiliser les résultats==&lt;br /&gt;
&lt;br /&gt;
Lancez le programme. Ce dernier va vous affichez les valeurs dites anormales. Vous pouvez&lt;br /&gt;
ensuite agir sur ces dernières en utilisant la variable anomaly_index qui est un tableau qui&lt;br /&gt;
contient tous les indices des anomalies détectées.&lt;br /&gt;
&lt;br /&gt;
=2)Explication plus précise du code=&lt;br /&gt;
&lt;br /&gt;
Voici une explication plus précise de chaque fonction utilisée dans le code donné dans le tuto.&lt;br /&gt;
&lt;br /&gt;
==1 Récupération des données==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, si nous avons bien suivi le tutoriel fournis nous avons déjà créée un fichier CSV qui&lt;br /&gt;
rassemble nos donnés. La fonction suivante permet de stocker toute ces informations dans une&lt;br /&gt;
variable en lisant le contenu de notre fichier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df = pd.read_csv(nom_fichier)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 2 Création du model ==&lt;br /&gt;
&lt;br /&gt;
Notre but maintenant est de définir le modèle utilisé par l’algorithme Isolation Forest ensuite. Cela&lt;br /&gt;
reviens à créer un objet contenant tous les paramètres donc la bibliothèque a besoin pour fonctionner.&lt;br /&gt;
&lt;br /&gt;
Pour cela vous allez devoir choisir des paramètres suivants vos besoins :&lt;br /&gt;
&lt;br /&gt;
===1) n_estimators===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir le nombre d&#039;estimateurs de base, c&#039;est-à-dire le nombre d&#039;arbres qui seront&lt;br /&gt;
construits dans la forêt.&lt;br /&gt;
&lt;br /&gt;
Plus le nombre d’arbre est élevé plus l’algorithme est fiable car les moyennes souffrirons moins des&lt;br /&gt;
valeurs écartées mais ces calculs prennent du temps et son couteux c’est pour cela qu’un nombre trop&lt;br /&gt;
élevé d’arbre serait du « gâchis » car la plupart du temps ils n’apportent rien car les anomalies étaient&lt;br /&gt;
déjà isolées avec moins d’arbres.&lt;br /&gt;
&lt;br /&gt;
On considère que 100 arbres sont suffisants pour quasiment toutes les applications courantes de&lt;br /&gt;
recherche d’anomalies c’est d’ailleurs la valeur par défaut.&lt;br /&gt;
&lt;br /&gt;
===2)max_samples===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir l’échantillon max soit le nombre d&#039;échantillons à tirer pour former chaque&lt;br /&gt;
estimateur de base.&lt;br /&gt;
&lt;br /&gt;
En effet lorsque l’on crée un arbre, surtout quand nous avons une grande banque de donnée nous&lt;br /&gt;
n’utilisons pas forcément tous les éléments de la base de donnée pour chaque arbres. Un échantillon&lt;br /&gt;
est créé pour n’utiliser que certaines données.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez changer cette valeur pour une valeur inferieur à 256 et aux nombres d’éléments dans&lt;br /&gt;
votre base de donnée si vous avez vraiment une contraintes de nombre d’opération à effectuer mais&lt;br /&gt;
celle si altèrera rapidement la qualité des résultats.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez mettre une valeur au dessus de 256 si votre base de donnée contient plus de 256&lt;br /&gt;
éléments et que vous n’avez pas peur d’une perte de rapidité et d’optimisation pour avoir un résultat&lt;br /&gt;
plus précis.&lt;br /&gt;
&lt;br /&gt;
Il est tout de même conseillé de laisser ce paramètre en paramétrage automatique celui-ci choisira la&lt;br /&gt;
valeur min(256, n_samples) qui pour la plupart des application est nettement appropriée.&lt;br /&gt;
Le programme créera donc un nombre correspondant d’échantillons qui seront utilisés pour créer&lt;br /&gt;
chaque arbres.&lt;br /&gt;
&lt;br /&gt;
===3) Contamination===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est le plus sensible et le plus délicat à choisir. Le taux de contamination est la proportion&lt;br /&gt;
d’anomalies attendues dans la base de données.&lt;br /&gt;
&lt;br /&gt;
Ce dernier est utilisé lors de l&#039;ajustement pour définir le seuil sur les scores des échantillons. Il est&lt;br /&gt;
essentiel car si nous affirmons une valeur pour ce paramètre le code nous donneras un nombre de&lt;br /&gt;
valeur anormales correspondant. Par exemple si nous entrons contamination=float(0.2) le programme&lt;br /&gt;
nous fournira 20% de valeurs aberrantes même si les scores d’anomalies en révèle plus ou moins.&lt;br /&gt;
La valeur par défaut est &#039;auto&#039;. Si &#039;auto&#039;, la valeur seuil sera déterminée comme dans l&#039;article original&lt;br /&gt;
d&#039;Isolation Forest.&lt;br /&gt;
&lt;br /&gt;
Si nous connaissons cette valeur en revanche par exemple si nous savons d’avance que nous voulons&lt;br /&gt;
enlever 10% des valeurs qui sont trop éloignées des autres nous pouvons l’indiquer tout en sachant&lt;br /&gt;
qu’elle est comprise entre (0, 0.5]&lt;br /&gt;
&lt;br /&gt;
===4) max_features ===&lt;br /&gt;
&lt;br /&gt;
Comme nous l’avons vu dans l’explication du principe de isolation forest, l’algorithme va créer&lt;br /&gt;
des séparations parmi les données jusqu’à isoler les différents éléments.&lt;br /&gt;
Or il n’est pas forcements nécessaire de continuer de créer des séparations jusqu’à ce que&lt;br /&gt;
tous les éléments de la base de données soit isolés. En effet comme nous avons vu les&lt;br /&gt;
éléments les plus difficiles à isoler ne sont pas ceux qui sont considérés comme anormal. Le&lt;br /&gt;
nombre de séparation créées peut donc être paramétré pour optimiser l’algorithme.&lt;br /&gt;
&lt;br /&gt;
La valeur par défaut est 1.0, on peut prendre une valeur différente mais cette dernière doit être&lt;br /&gt;
inferieur à 1.&lt;br /&gt;
&lt;br /&gt;
===5) bootstrap===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen, si on entre la valeur ‘Vrai’ cela indique que les tirages&lt;br /&gt;
d’échantillonnage pour chaque arbre est effectué avec remise, si ce paramètre est ‘Faux’ cela indique&lt;br /&gt;
cela indique que l’échantillonnage est fait sans remise.&lt;br /&gt;
Le réglage par défaut est False.&lt;br /&gt;
&lt;br /&gt;
===6) n_jobs===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre permet de définir le nombre de tâche à exécuter en parallèle pour l’utilisation des&lt;br /&gt;
fonction fit et predict que nous expliquons plus loin.&lt;br /&gt;
Il n’est pas utile de se soucier de ce paramètre à moins que nous ayons une dataset de très très&lt;br /&gt;
grande taille.&lt;br /&gt;
&lt;br /&gt;
Si sa valeur est ‘none’ une seule tâche est effectuée à la fois, si sa valeur est ‘-1’ le programme&lt;br /&gt;
utilisera alors tout le processeur disponible.&lt;br /&gt;
&lt;br /&gt;
===7) random_state===&lt;br /&gt;
Ce paramètre contrôle le caractère pseudo-aléatoire de l’échantillonnage et du choix des splits, pour&lt;br /&gt;
chaque étape de création d’arbre.&lt;br /&gt;
C’est un entier qui suivant sa valeur appellera les fonctions si dessous plusieurs fois afin de faire des&lt;br /&gt;
moyennes des résultats pour accroire le caractère aléatoire des tirages faits.&lt;br /&gt;
&lt;br /&gt;
===8) warm_start===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen qui si il est paramétrer sur Vrai, réutilise la solution de l&#039;appel&lt;br /&gt;
précédent pour s&#039;adapter et rajoute seulement des estimateur dans l’ensemble. Si le paramètre&lt;br /&gt;
est Faux une toute nouvelle forêt est créée.&lt;br /&gt;
Ce paramètre peut être utile si vous utilisez une très grande base de donée et que vous pensez&lt;br /&gt;
qu’une précision supplémentaire est nécessaire.&lt;br /&gt;
&lt;br /&gt;
Les paramètres conseillés sont les suivants :&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;, contamination= »auto »&lt;br /&gt;
,max_features=1.0, bootstrap=False, n_jobs=’None’, random_state=None,&lt;br /&gt;
warm_start=False)&lt;br /&gt;
&lt;br /&gt;
===4.3 Utilisation du model===&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons défini le modèle avec lequel nous voulons travailler nous devons l’utiliser&lt;br /&gt;
pour l’appliquer à nos données.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous allons utiliser la fonction fit qui va ajuster le modèle sur les données. En d’autres mots&lt;br /&gt;
cette fonction crée tous les arbres de la forêt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.fit(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous utilisons ensuite la fonction decision_function qui va trouver le score d&#039;anomalie de chaque&lt;br /&gt;
éléments en étudiants pour chacun leurs positions dans tout les arbres créés précédemment. Elle va&lt;br /&gt;
donc calculer le score d&#039;anomalie moyen de X des classificateurs de base.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.decision_function(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
La fonction predict va ensuite attribuer une valeur a chaque éléments qui indique si cet élément est&lt;br /&gt;
considéré comme normal (valeur 0) ou comme anomalie (-1) .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.predict(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour plus de lisibilité nous plaçons ces deux scores dans notre tableau de données grâce aux fonctions&lt;br /&gt;
suivantes :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
Finalement nous cherchons un affichage correcte des résultats et pour cela nous isolons toute les&lt;br /&gt;
lignes correspondants à des anomalies pour les mettre dans un tableau séparé. Nous en profitons pour&lt;br /&gt;
isoler les index des anomalies dans une variable qui pourrait nous être utile plus tard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
anomaly_index=list(anomaly.index)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et pour terminer nous affichons les lignes correspondants aux anomalies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour visualiser les erreurs nous pouvons utiliser le code suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;# valeur à entrer&lt;br /&gt;
var1 = &#039;’&lt;br /&gt;
var2 = &#039;&#039;&lt;br /&gt;
# Code à ne pas modifier&lt;br /&gt;
pred_scores = -1*model.score_samples(df)&lt;br /&gt;
plt.scatter(df[[var1]],df[[var2]], c=pred_scores, cmap=&#039;RdBu&#039;)&lt;br /&gt;
plt.colorbar(label=&#039;Simplified Anomaly Score&#039;)&lt;br /&gt;
show()&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez choisir les deux noms des colonnes des variables que vous voulez choisir comme abscisse et&lt;br /&gt;
ordonnées de votre graphique&lt;br /&gt;
Cet affichage permet de visualiser l’ensemble des données ainsi que leurs score d’anomalies associé.&lt;br /&gt;
Cet affichages est très révélateur pour les base de données de dimensions 2 voire 3 mais pour les&lt;br /&gt;
dimensions plus élevées cet affichage perd de son intérêt.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13964</id>
		<title>Wiki tuto</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13964"/>
		<updated>2022-05-27T17:19:34Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* 2 Import des bibliothèques */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutoriel d’utilisation de l’algorithme Isolation forest&lt;br /&gt;
&lt;br /&gt;
Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra&lt;br /&gt;
comment utiliser facilement cet algorithme pour analyser votre propre banque de données. Il vous&lt;br /&gt;
fournira le code nécessaire mais aussi vous expliquera quels paramètres modifier si vous souhaitez&lt;br /&gt;
modifier le code pour l’adapter à vos besoins.&lt;br /&gt;
&lt;br /&gt;
=1 ) Tutoriel=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce tutoriel correctement il faut créer un fichier .py par exemple où on copie toute les&lt;br /&gt;
parties entre barres.&lt;br /&gt;
&lt;br /&gt;
==1 Formatage des données==&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord vous devez formater vos données afin qu&#039;elles soient compatibles avec la suite de&lt;br /&gt;
ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Pour cela créez un tableau sur excel ou autre tableur. La première colonne est l&#039;identifiant qui&lt;br /&gt;
vous permettra d&#039;identifier rapidement les anomalies qui vous seront indiquées, peut être le&lt;br /&gt;
numéro de la ligne par exemple.&lt;br /&gt;
&lt;br /&gt;
Ensuite chaque colonne dont on mettra le titre en ligne 1 contiendra les valeurs d&#039;une&lt;br /&gt;
caractéristique pour chaque élément de la base de données.&lt;br /&gt;
Finalement, enregistrez ce document sous le format cvs séparé par des virgules dans un&lt;br /&gt;
dossier de votre choix.&lt;br /&gt;
&lt;br /&gt;
==2 Import des bibliothèques==&lt;br /&gt;
&lt;br /&gt;
Vous devez maintenant créer un fichier dans le MEME dossier que celui où vous avez mis votre&lt;br /&gt;
dataset. Ce fichier est celui où nous allons écrire le programme une extension .py est donc conseillée.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de l’algorithme comme nous l’avons vu plus haut est assez complexe mais&lt;br /&gt;
heureusement des bibliothèque assez simplifiée ont étés crées ce qui va nous simplifier grandement&lt;br /&gt;
la tâche. Malheureusement ceci peut aussi nous désavantager car les seules fonctions qui sont&lt;br /&gt;
données sont très opaque et ne laisse peut de place à la compréhension du code interne et à la&lt;br /&gt;
modification de ce dernier. C’est pour cela que nous allons essayer de nous concentrer sur la&lt;br /&gt;
compréhension des arguments que nous donnons aux fonctions que nous allons utiliser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;import numpy as np&lt;br /&gt;
&lt;br /&gt;
import pandas as pd&lt;br /&gt;
&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
&lt;br /&gt;
from sklearn.ensemble import IsolationForest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous voulez trouver les anomalies en prenant en compte une seule variable de votre base de&lt;br /&gt;
donnez suivez la partie : &amp;quot;Recherche anomalie pour une seule variable&amp;quot;. Si vous voulez connaitre&lt;br /&gt;
les annomalies en prenant en comptes toutes les variables entrées dans votre documents csv&lt;br /&gt;
suivez la partie : &amp;quot;Recherche anomalie pour toute les variable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==3 Recherche anomalie pour toute les variables¶==&lt;br /&gt;
&lt;br /&gt;
Dans cette section nous prenons en compte toute les variables entrées pour les éléments de notre&lt;br /&gt;
dataset.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
df = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
df_modif = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
model.fit(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&lt;br /&gt;
anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la première ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset.&lt;br /&gt;
&lt;br /&gt;
==3 BIS Recherche anomalie pour une seule variable==&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez savoir qu’elles sont les valeurs anormales pour une seule variables, par exemple ne&lt;br /&gt;
prendre en compte que la variable de l’age dans une certaine population, il faut utiliser le code&lt;br /&gt;
suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;#Valeur que vous devez entrez&lt;br /&gt;
nom_fichier = &#039;&#039;&lt;br /&gt;
nom_variable =&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Reste du code à ne pas modifier&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
model.fit(df[[nom_variable]])&lt;br /&gt;
model.predict(df[[nom_variable]])&lt;br /&gt;
df[&#039;scores&#039;]=model.decision_function(df[[nom_variable]])&lt;br /&gt;
df[&#039;anomaly&#039;]=model.predict(df[[nom_variable]])&lt;br /&gt;
anomaly=df.loc[df[&#039;anomaly&#039;]==-1]&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la premiere ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset. Ainsi que le titre de la colonne de la variable que&lt;br /&gt;
vous voulez prendre en compte dans nom_variable.&lt;br /&gt;
&lt;br /&gt;
==4 Utiliser les résultats==&lt;br /&gt;
&lt;br /&gt;
Lancez le programme. Ce dernier va vous affichez les valeurs dites anormales. Vous pouvez&lt;br /&gt;
ensuite agir sur ces dernières en utilisant la variable anomaly_index qui est un tableau qui&lt;br /&gt;
contient tous les indices des anomalies détectées.&lt;br /&gt;
&lt;br /&gt;
=2)Explication plus précise du code=&lt;br /&gt;
&lt;br /&gt;
Voici une explication plus précise de chaque fonction utilisée dans le code donné dans le tuto.&lt;br /&gt;
&lt;br /&gt;
==1 Récupération des données==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, si nous avons bien suivi le tutoriel fournis nous avons déjà créée un fichier CSV qui&lt;br /&gt;
rassemble nos donnés. La fonction suivante permet de stocker toute ces informations dans une&lt;br /&gt;
variable en lisant le contenu de notre fichier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df = pd.read_csv(nom_fichier)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 2 Création du model ==&lt;br /&gt;
&lt;br /&gt;
Notre but maintenant est de définir le modèle utilisé par l’algorithme Isolation Forest ensuite. Cela&lt;br /&gt;
reviens à créer un objet contenant tous les paramètres donc la bibliothèque a besoin pour fonctionner.&lt;br /&gt;
&lt;br /&gt;
Pour cela vous allez devoir choisir des paramètres suivants vos besoins :&lt;br /&gt;
&lt;br /&gt;
===1) n_estimators===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir le nombre d&#039;estimateurs de base, c&#039;est-à-dire le nombre d&#039;arbres qui seront&lt;br /&gt;
construits dans la forêt.&lt;br /&gt;
&lt;br /&gt;
Plus le nombre d’arbre est élevé plus l’algorithme est fiable car les moyennes souffrirons moins des&lt;br /&gt;
valeurs écartées mais ces calculs prennent du temps et son couteux c’est pour cela qu’un nombre trop&lt;br /&gt;
élevé d’arbre serait du « gâchis » car la plupart du temps ils n’apportent rien car les anomalies étaient&lt;br /&gt;
déjà isolées avec moins d’arbres.&lt;br /&gt;
&lt;br /&gt;
On considère que 100 arbres sont suffisants pour quasiment toutes les applications courantes de&lt;br /&gt;
recherche d’anomalies c’est d’ailleurs la valeur par défaut.&lt;br /&gt;
&lt;br /&gt;
===2)max_samples===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir l’échantillon max soit le nombre d&#039;échantillons à tirer pour former chaque&lt;br /&gt;
estimateur de base.&lt;br /&gt;
&lt;br /&gt;
En effet lorsque l’on crée un arbre, surtout quand nous avons une grande banque de donnée nous&lt;br /&gt;
n’utilisons pas forcément tous les éléments de la base de donnée pour chaque arbres. Un échantillon&lt;br /&gt;
est créé pour n’utiliser que certaines données.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez changer cette valeur pour une valeur inferieur à 256 et aux nombres d’éléments dans&lt;br /&gt;
votre base de donnée si vous avez vraiment une contraintes de nombre d’opération à effectuer mais&lt;br /&gt;
celle si altèrera rapidement la qualité des résultats.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez mettre une valeur au dessus de 256 si votre base de donnée contient plus de 256&lt;br /&gt;
éléments et que vous n’avez pas peur d’une perte de rapidité et d’optimisation pour avoir un résultat&lt;br /&gt;
plus précis.&lt;br /&gt;
&lt;br /&gt;
Il est tout de même conseillé de laisser ce paramètre en paramétrage automatique celui-ci choisira la&lt;br /&gt;
valeur min(256, n_samples) qui pour la plupart des application est nettement appropriée.&lt;br /&gt;
Le programme créera donc un nombre correspondant d’échantillons qui seront utilisés pour créer&lt;br /&gt;
chaque arbres.&lt;br /&gt;
&lt;br /&gt;
===3) Contamination===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est le plus sensible et le plus délicat à choisir. Le taux de contamination est la proportion&lt;br /&gt;
d’anomalies attendues dans la base de données.&lt;br /&gt;
&lt;br /&gt;
Ce dernier est utilisé lors de l&#039;ajustement pour définir le seuil sur les scores des échantillons. Il est&lt;br /&gt;
essentiel car si nous affirmons une valeur pour ce paramètre le code nous donneras un nombre de&lt;br /&gt;
valeur anormales correspondant. Par exemple si nous entrons contamination=float(0.2) le programme&lt;br /&gt;
nous fournira 20% de valeurs aberrantes même si les scores d’anomalies en révèle plus ou moins.&lt;br /&gt;
La valeur par défaut est &#039;auto&#039;. Si &#039;auto&#039;, la valeur seuil sera déterminée comme dans l&#039;article original&lt;br /&gt;
d&#039;Isolation Forest.&lt;br /&gt;
&lt;br /&gt;
Si nous connaissons cette valeur en revanche par exemple si nous savons d’avance que nous voulons&lt;br /&gt;
enlever 10% des valeurs qui sont trop éloignées des autres nous pouvons l’indiquer tout en sachant&lt;br /&gt;
qu’elle est comprise entre (0, 0.5]&lt;br /&gt;
&lt;br /&gt;
===4) max_features ===&lt;br /&gt;
&lt;br /&gt;
Comme nous l’avons vu dans l’explication du principe de isolation forest, l’algorithme va créer&lt;br /&gt;
des séparations parmi les données jusqu’à isoler les différents éléments.&lt;br /&gt;
Or il n’est pas forcements nécessaire de continuer de créer des séparations jusqu’à ce que&lt;br /&gt;
tous les éléments de la base de données soit isolés. En effet comme nous avons vu les&lt;br /&gt;
éléments les plus difficiles à isoler ne sont pas ceux qui sont considérés comme anormal. Le&lt;br /&gt;
nombre de séparation créées peut donc être paramétré pour optimiser l’algorithme.&lt;br /&gt;
&lt;br /&gt;
La valeur par défaut est 1.0, on peut prendre une valeur différente mais cette dernière doit être&lt;br /&gt;
inferieur à 1.&lt;br /&gt;
&lt;br /&gt;
===5) bootstrap===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen, si on entre la valeur ‘Vrai’ cela indique que les tirages&lt;br /&gt;
d’échantillonnage pour chaque arbre est effectué avec remise, si ce paramètre est ‘Faux’ cela indique&lt;br /&gt;
cela indique que l’échantillonnage est fait sans remise.&lt;br /&gt;
Le réglage par défaut est False.&lt;br /&gt;
&lt;br /&gt;
===6) n_jobs===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre permet de définir le nombre de tâche à exécuter en parallèle pour l’utilisation des&lt;br /&gt;
fonction fit et predict que nous expliquons plus loin.&lt;br /&gt;
Il n’est pas utile de se soucier de ce paramètre à moins que nous ayons une dataset de très très&lt;br /&gt;
grande taille.&lt;br /&gt;
&lt;br /&gt;
Si sa valeur est ‘none’ une seule tâche est effectuée à la fois, si sa valeur est ‘-1’ le programme&lt;br /&gt;
utilisera alors tout le processeur disponible.&lt;br /&gt;
&lt;br /&gt;
===7) random_state===&lt;br /&gt;
Ce paramètre contrôle le caractère pseudo-aléatoire de l’échantillonnage et du choix des splits, pour&lt;br /&gt;
chaque étape de création d’arbre.&lt;br /&gt;
C’est un entier qui suivant sa valeur appellera les fonctions si dessous plusieurs fois afin de faire des&lt;br /&gt;
moyennes des résultats pour accroire le caractère aléatoire des tirages faits.&lt;br /&gt;
&lt;br /&gt;
===8) warm_start===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen qui si il est paramétrer sur Vrai, réutilise la solution de l&#039;appel&lt;br /&gt;
précédent pour s&#039;adapter et rajoute seulement des estimateur dans l’ensemble. Si le paramètre&lt;br /&gt;
est Faux une toute nouvelle forêt est créée.&lt;br /&gt;
Ce paramètre peut être utile si vous utilisez une très grande base de donée et que vous pensez&lt;br /&gt;
qu’une précision supplémentaire est nécessaire.&lt;br /&gt;
&lt;br /&gt;
Les paramètres conseillés sont les suivants :&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;, contamination= »auto »&lt;br /&gt;
,max_features=1.0, bootstrap=False, n_jobs=’None’, random_state=None,&lt;br /&gt;
warm_start=False)&lt;br /&gt;
&lt;br /&gt;
===4.3 Utilisation du model===&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons défini le modèle avec lequel nous voulons travailler nous devons l’utiliser&lt;br /&gt;
pour l’appliquer à nos données.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous allons utiliser la fonction fit qui va ajuster le modèle sur les données. En d’autres mots&lt;br /&gt;
cette fonction crée tous les arbres de la forêt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.fit(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous utilisons ensuite la fonction decision_function qui va trouver le score d&#039;anomalie de chaque&lt;br /&gt;
éléments en étudiants pour chacun leurs positions dans tout les arbres créés précédemment. Elle va&lt;br /&gt;
donc calculer le score d&#039;anomalie moyen de X des classificateurs de base.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.decision_function(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
La fonction predict va ensuite attribuer une valeur a chaque éléments qui indique si cet élément est&lt;br /&gt;
considéré comme normal (valeur 0) ou comme anomalie (-1) .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.predict(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour plus de lisibilité nous plaçons ces deux scores dans notre tableau de données grâce aux fonctions&lt;br /&gt;
suivantes :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
Finalement nous cherchons un affichage correcte des résultats et pour cela nous isolons toute les&lt;br /&gt;
lignes correspondants à des anomalies pour les mettre dans un tableau séparé. Nous en profitons pour&lt;br /&gt;
isoler les index des anomalies dans une variable qui pourrait nous être utile plus tard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
anomaly_index=list(anomaly.index)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et pour terminer nous affichons les lignes correspondants aux anomalies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour visualiser les erreurs nous pouvons utiliser le code suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;# valeur à entrer&lt;br /&gt;
var1 = &#039;’&lt;br /&gt;
var2 = &#039;&#039;&lt;br /&gt;
# Code à ne pas modifier&lt;br /&gt;
pred_scores = -1*model.score_samples(df)&lt;br /&gt;
plt.scatter(df[[var1]],df[[var2]], c=pred_scores, cmap=&#039;RdBu&#039;)&lt;br /&gt;
plt.colorbar(label=&#039;Simplified Anomaly Score&#039;)&lt;br /&gt;
show()&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez choisir les deux noms des colonnes des variables que vous voulez choisir comme abscisse et&lt;br /&gt;
ordonnées de votre graphique&lt;br /&gt;
Cet affichage permet de visualiser l’ensemble des données ainsi que leurs score d’anomalies associé.&lt;br /&gt;
Cet affichages est très révélateur pour les base de données de dimensions 2 voire 3 mais pour les&lt;br /&gt;
dimensions plus élevées cet affichage perd de son intérêt.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13963</id>
		<title>Wiki tuto</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13963"/>
		<updated>2022-05-27T17:19:16Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* 1 ) Tutoriel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutoriel d’utilisation de l’algorithme Isolation forest&lt;br /&gt;
&lt;br /&gt;
Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra&lt;br /&gt;
comment utiliser facilement cet algorithme pour analyser votre propre banque de données. Il vous&lt;br /&gt;
fournira le code nécessaire mais aussi vous expliquera quels paramètres modifier si vous souhaitez&lt;br /&gt;
modifier le code pour l’adapter à vos besoins.&lt;br /&gt;
&lt;br /&gt;
=1 ) Tutoriel=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce tutoriel correctement il faut créer un fichier .py par exemple où on copie toute les&lt;br /&gt;
parties entre barres.&lt;br /&gt;
&lt;br /&gt;
==1 Formatage des données==&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord vous devez formater vos données afin qu&#039;elles soient compatibles avec la suite de&lt;br /&gt;
ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Pour cela créez un tableau sur excel ou autre tableur. La première colonne est l&#039;identifiant qui&lt;br /&gt;
vous permettra d&#039;identifier rapidement les anomalies qui vous seront indiquées, peut être le&lt;br /&gt;
numéro de la ligne par exemple.&lt;br /&gt;
&lt;br /&gt;
Ensuite chaque colonne dont on mettra le titre en ligne 1 contiendra les valeurs d&#039;une&lt;br /&gt;
caractéristique pour chaque élément de la base de données.&lt;br /&gt;
Finalement, enregistrez ce document sous le format cvs séparé par des virgules dans un&lt;br /&gt;
dossier de votre choix.&lt;br /&gt;
&lt;br /&gt;
==2 Import des bibliothèques==&lt;br /&gt;
&lt;br /&gt;
Vous devez maintenant créer un fichier dans le MEME dossier que celui où vous avez mis votre&lt;br /&gt;
dataset. Ce fichier est celui où nous allons écrire le programme une extension .py est donc conseillée.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de l’algorithme comme nous l’avons vu plus haut est assez complexe mais&lt;br /&gt;
heureusement des bibliothèque assez simplifiée ont étés crées ce qui va nous simplifier grandement&lt;br /&gt;
la tâche. Malheureusement ceci peut aussi nous désavantager car les seules fonctions qui sont&lt;br /&gt;
données sont très opaque et ne laisse peut de place à la compréhension du code interne et à la&lt;br /&gt;
modification de ce dernier. C’est pour cela que nous allons essayer de nous concentrer sur la&lt;br /&gt;
compréhension des arguments que nous donnons aux fonctions que nous allons utiliser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;import numpy as np&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from sklearn.ensemble import IsolationForest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous voulez trouver les anomalies en prenant en compte une seule variable de votre base de&lt;br /&gt;
donnez suivez la partie : &amp;quot;Recherche anomalie pour une seule variable&amp;quot;. Si vous voulez connaitre&lt;br /&gt;
les annomalies en prenant en comptes toutes les variables entrées dans votre documents csv&lt;br /&gt;
suivez la partie : &amp;quot;Recherche anomalie pour toute les variable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==3 Recherche anomalie pour toute les variables¶==&lt;br /&gt;
&lt;br /&gt;
Dans cette section nous prenons en compte toute les variables entrées pour les éléments de notre&lt;br /&gt;
dataset.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
df = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
df_modif = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
model.fit(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&lt;br /&gt;
anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la première ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset.&lt;br /&gt;
&lt;br /&gt;
==3 BIS Recherche anomalie pour une seule variable==&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez savoir qu’elles sont les valeurs anormales pour une seule variables, par exemple ne&lt;br /&gt;
prendre en compte que la variable de l’age dans une certaine population, il faut utiliser le code&lt;br /&gt;
suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;#Valeur que vous devez entrez&lt;br /&gt;
nom_fichier = &#039;&#039;&lt;br /&gt;
nom_variable =&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Reste du code à ne pas modifier&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
model.fit(df[[nom_variable]])&lt;br /&gt;
model.predict(df[[nom_variable]])&lt;br /&gt;
df[&#039;scores&#039;]=model.decision_function(df[[nom_variable]])&lt;br /&gt;
df[&#039;anomaly&#039;]=model.predict(df[[nom_variable]])&lt;br /&gt;
anomaly=df.loc[df[&#039;anomaly&#039;]==-1]&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la premiere ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset. Ainsi que le titre de la colonne de la variable que&lt;br /&gt;
vous voulez prendre en compte dans nom_variable.&lt;br /&gt;
&lt;br /&gt;
==4 Utiliser les résultats==&lt;br /&gt;
&lt;br /&gt;
Lancez le programme. Ce dernier va vous affichez les valeurs dites anormales. Vous pouvez&lt;br /&gt;
ensuite agir sur ces dernières en utilisant la variable anomaly_index qui est un tableau qui&lt;br /&gt;
contient tous les indices des anomalies détectées.&lt;br /&gt;
&lt;br /&gt;
=2)Explication plus précise du code=&lt;br /&gt;
&lt;br /&gt;
Voici une explication plus précise de chaque fonction utilisée dans le code donné dans le tuto.&lt;br /&gt;
&lt;br /&gt;
==1 Récupération des données==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, si nous avons bien suivi le tutoriel fournis nous avons déjà créée un fichier CSV qui&lt;br /&gt;
rassemble nos donnés. La fonction suivante permet de stocker toute ces informations dans une&lt;br /&gt;
variable en lisant le contenu de notre fichier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df = pd.read_csv(nom_fichier)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 2 Création du model ==&lt;br /&gt;
&lt;br /&gt;
Notre but maintenant est de définir le modèle utilisé par l’algorithme Isolation Forest ensuite. Cela&lt;br /&gt;
reviens à créer un objet contenant tous les paramètres donc la bibliothèque a besoin pour fonctionner.&lt;br /&gt;
&lt;br /&gt;
Pour cela vous allez devoir choisir des paramètres suivants vos besoins :&lt;br /&gt;
&lt;br /&gt;
===1) n_estimators===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir le nombre d&#039;estimateurs de base, c&#039;est-à-dire le nombre d&#039;arbres qui seront&lt;br /&gt;
construits dans la forêt.&lt;br /&gt;
&lt;br /&gt;
Plus le nombre d’arbre est élevé plus l’algorithme est fiable car les moyennes souffrirons moins des&lt;br /&gt;
valeurs écartées mais ces calculs prennent du temps et son couteux c’est pour cela qu’un nombre trop&lt;br /&gt;
élevé d’arbre serait du « gâchis » car la plupart du temps ils n’apportent rien car les anomalies étaient&lt;br /&gt;
déjà isolées avec moins d’arbres.&lt;br /&gt;
&lt;br /&gt;
On considère que 100 arbres sont suffisants pour quasiment toutes les applications courantes de&lt;br /&gt;
recherche d’anomalies c’est d’ailleurs la valeur par défaut.&lt;br /&gt;
&lt;br /&gt;
===2)max_samples===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir l’échantillon max soit le nombre d&#039;échantillons à tirer pour former chaque&lt;br /&gt;
estimateur de base.&lt;br /&gt;
&lt;br /&gt;
En effet lorsque l’on crée un arbre, surtout quand nous avons une grande banque de donnée nous&lt;br /&gt;
n’utilisons pas forcément tous les éléments de la base de donnée pour chaque arbres. Un échantillon&lt;br /&gt;
est créé pour n’utiliser que certaines données.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez changer cette valeur pour une valeur inferieur à 256 et aux nombres d’éléments dans&lt;br /&gt;
votre base de donnée si vous avez vraiment une contraintes de nombre d’opération à effectuer mais&lt;br /&gt;
celle si altèrera rapidement la qualité des résultats.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez mettre une valeur au dessus de 256 si votre base de donnée contient plus de 256&lt;br /&gt;
éléments et que vous n’avez pas peur d’une perte de rapidité et d’optimisation pour avoir un résultat&lt;br /&gt;
plus précis.&lt;br /&gt;
&lt;br /&gt;
Il est tout de même conseillé de laisser ce paramètre en paramétrage automatique celui-ci choisira la&lt;br /&gt;
valeur min(256, n_samples) qui pour la plupart des application est nettement appropriée.&lt;br /&gt;
Le programme créera donc un nombre correspondant d’échantillons qui seront utilisés pour créer&lt;br /&gt;
chaque arbres.&lt;br /&gt;
&lt;br /&gt;
===3) Contamination===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est le plus sensible et le plus délicat à choisir. Le taux de contamination est la proportion&lt;br /&gt;
d’anomalies attendues dans la base de données.&lt;br /&gt;
&lt;br /&gt;
Ce dernier est utilisé lors de l&#039;ajustement pour définir le seuil sur les scores des échantillons. Il est&lt;br /&gt;
essentiel car si nous affirmons une valeur pour ce paramètre le code nous donneras un nombre de&lt;br /&gt;
valeur anormales correspondant. Par exemple si nous entrons contamination=float(0.2) le programme&lt;br /&gt;
nous fournira 20% de valeurs aberrantes même si les scores d’anomalies en révèle plus ou moins.&lt;br /&gt;
La valeur par défaut est &#039;auto&#039;. Si &#039;auto&#039;, la valeur seuil sera déterminée comme dans l&#039;article original&lt;br /&gt;
d&#039;Isolation Forest.&lt;br /&gt;
&lt;br /&gt;
Si nous connaissons cette valeur en revanche par exemple si nous savons d’avance que nous voulons&lt;br /&gt;
enlever 10% des valeurs qui sont trop éloignées des autres nous pouvons l’indiquer tout en sachant&lt;br /&gt;
qu’elle est comprise entre (0, 0.5]&lt;br /&gt;
&lt;br /&gt;
===4) max_features ===&lt;br /&gt;
&lt;br /&gt;
Comme nous l’avons vu dans l’explication du principe de isolation forest, l’algorithme va créer&lt;br /&gt;
des séparations parmi les données jusqu’à isoler les différents éléments.&lt;br /&gt;
Or il n’est pas forcements nécessaire de continuer de créer des séparations jusqu’à ce que&lt;br /&gt;
tous les éléments de la base de données soit isolés. En effet comme nous avons vu les&lt;br /&gt;
éléments les plus difficiles à isoler ne sont pas ceux qui sont considérés comme anormal. Le&lt;br /&gt;
nombre de séparation créées peut donc être paramétré pour optimiser l’algorithme.&lt;br /&gt;
&lt;br /&gt;
La valeur par défaut est 1.0, on peut prendre une valeur différente mais cette dernière doit être&lt;br /&gt;
inferieur à 1.&lt;br /&gt;
&lt;br /&gt;
===5) bootstrap===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen, si on entre la valeur ‘Vrai’ cela indique que les tirages&lt;br /&gt;
d’échantillonnage pour chaque arbre est effectué avec remise, si ce paramètre est ‘Faux’ cela indique&lt;br /&gt;
cela indique que l’échantillonnage est fait sans remise.&lt;br /&gt;
Le réglage par défaut est False.&lt;br /&gt;
&lt;br /&gt;
===6) n_jobs===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre permet de définir le nombre de tâche à exécuter en parallèle pour l’utilisation des&lt;br /&gt;
fonction fit et predict que nous expliquons plus loin.&lt;br /&gt;
Il n’est pas utile de se soucier de ce paramètre à moins que nous ayons une dataset de très très&lt;br /&gt;
grande taille.&lt;br /&gt;
&lt;br /&gt;
Si sa valeur est ‘none’ une seule tâche est effectuée à la fois, si sa valeur est ‘-1’ le programme&lt;br /&gt;
utilisera alors tout le processeur disponible.&lt;br /&gt;
&lt;br /&gt;
===7) random_state===&lt;br /&gt;
Ce paramètre contrôle le caractère pseudo-aléatoire de l’échantillonnage et du choix des splits, pour&lt;br /&gt;
chaque étape de création d’arbre.&lt;br /&gt;
C’est un entier qui suivant sa valeur appellera les fonctions si dessous plusieurs fois afin de faire des&lt;br /&gt;
moyennes des résultats pour accroire le caractère aléatoire des tirages faits.&lt;br /&gt;
&lt;br /&gt;
===8) warm_start===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen qui si il est paramétrer sur Vrai, réutilise la solution de l&#039;appel&lt;br /&gt;
précédent pour s&#039;adapter et rajoute seulement des estimateur dans l’ensemble. Si le paramètre&lt;br /&gt;
est Faux une toute nouvelle forêt est créée.&lt;br /&gt;
Ce paramètre peut être utile si vous utilisez une très grande base de donée et que vous pensez&lt;br /&gt;
qu’une précision supplémentaire est nécessaire.&lt;br /&gt;
&lt;br /&gt;
Les paramètres conseillés sont les suivants :&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;, contamination= »auto »&lt;br /&gt;
,max_features=1.0, bootstrap=False, n_jobs=’None’, random_state=None,&lt;br /&gt;
warm_start=False)&lt;br /&gt;
&lt;br /&gt;
===4.3 Utilisation du model===&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons défini le modèle avec lequel nous voulons travailler nous devons l’utiliser&lt;br /&gt;
pour l’appliquer à nos données.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous allons utiliser la fonction fit qui va ajuster le modèle sur les données. En d’autres mots&lt;br /&gt;
cette fonction crée tous les arbres de la forêt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.fit(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous utilisons ensuite la fonction decision_function qui va trouver le score d&#039;anomalie de chaque&lt;br /&gt;
éléments en étudiants pour chacun leurs positions dans tout les arbres créés précédemment. Elle va&lt;br /&gt;
donc calculer le score d&#039;anomalie moyen de X des classificateurs de base.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.decision_function(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
La fonction predict va ensuite attribuer une valeur a chaque éléments qui indique si cet élément est&lt;br /&gt;
considéré comme normal (valeur 0) ou comme anomalie (-1) .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.predict(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour plus de lisibilité nous plaçons ces deux scores dans notre tableau de données grâce aux fonctions&lt;br /&gt;
suivantes :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
Finalement nous cherchons un affichage correcte des résultats et pour cela nous isolons toute les&lt;br /&gt;
lignes correspondants à des anomalies pour les mettre dans un tableau séparé. Nous en profitons pour&lt;br /&gt;
isoler les index des anomalies dans une variable qui pourrait nous être utile plus tard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
anomaly_index=list(anomaly.index)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et pour terminer nous affichons les lignes correspondants aux anomalies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour visualiser les erreurs nous pouvons utiliser le code suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;# valeur à entrer&lt;br /&gt;
var1 = &#039;’&lt;br /&gt;
var2 = &#039;&#039;&lt;br /&gt;
# Code à ne pas modifier&lt;br /&gt;
pred_scores = -1*model.score_samples(df)&lt;br /&gt;
plt.scatter(df[[var1]],df[[var2]], c=pred_scores, cmap=&#039;RdBu&#039;)&lt;br /&gt;
plt.colorbar(label=&#039;Simplified Anomaly Score&#039;)&lt;br /&gt;
show()&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez choisir les deux noms des colonnes des variables que vous voulez choisir comme abscisse et&lt;br /&gt;
ordonnées de votre graphique&lt;br /&gt;
Cet affichage permet de visualiser l’ensemble des données ainsi que leurs score d’anomalies associé.&lt;br /&gt;
Cet affichages est très révélateur pour les base de données de dimensions 2 voire 3 mais pour les&lt;br /&gt;
dimensions plus élevées cet affichage perd de son intérêt.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13962</id>
		<title>Wiki tuto</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13962"/>
		<updated>2022-05-27T17:18:57Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* 3 Recherche anomalie pour toute les variables¶ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutoriel d’utilisation de l’algorithme Isolation forest&lt;br /&gt;
&lt;br /&gt;
Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra&lt;br /&gt;
comment utiliser facilement cet algorithme pour analyser votre propre banque de données. Il vous&lt;br /&gt;
fournira le code nécessaire mais aussi vous expliquera quels paramètres modifier si vous souhaitez&lt;br /&gt;
modifier le code pour l’adapter à vos besoins.&lt;br /&gt;
&lt;br /&gt;
=1 ) Tutoriel=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce tutoriel correctement il faut créer un fichier .py par exemple où on copie toute les&lt;br /&gt;
parties en italique entre barres.&lt;br /&gt;
&lt;br /&gt;
==1 Formatage des données==&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord vous devez formater vos données afin qu&#039;elles soient compatibles avec la suite de&lt;br /&gt;
ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Pour cela créez un tableau sur excel ou autre tableur. La première colonne est l&#039;identifiant qui&lt;br /&gt;
vous permettra d&#039;identifier rapidement les anomalies qui vous seront indiquées, peut être le&lt;br /&gt;
numéro de la ligne par exemple.&lt;br /&gt;
&lt;br /&gt;
Ensuite chaque colonne dont on mettra le titre en ligne 1 contiendra les valeurs d&#039;une&lt;br /&gt;
caractéristique pour chaque élément de la base de données.&lt;br /&gt;
Finalement, enregistrez ce document sous le format cvs séparé par des virgules dans un&lt;br /&gt;
dossier de votre choix.&lt;br /&gt;
&lt;br /&gt;
==2 Import des bibliothèques==&lt;br /&gt;
&lt;br /&gt;
Vous devez maintenant créer un fichier dans le MEME dossier que celui où vous avez mis votre&lt;br /&gt;
dataset. Ce fichier est celui où nous allons écrire le programme une extension .py est donc conseillée.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de l’algorithme comme nous l’avons vu plus haut est assez complexe mais&lt;br /&gt;
heureusement des bibliothèque assez simplifiée ont étés crées ce qui va nous simplifier grandement&lt;br /&gt;
la tâche. Malheureusement ceci peut aussi nous désavantager car les seules fonctions qui sont&lt;br /&gt;
données sont très opaque et ne laisse peut de place à la compréhension du code interne et à la&lt;br /&gt;
modification de ce dernier. C’est pour cela que nous allons essayer de nous concentrer sur la&lt;br /&gt;
compréhension des arguments que nous donnons aux fonctions que nous allons utiliser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;import numpy as np&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from sklearn.ensemble import IsolationForest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous voulez trouver les anomalies en prenant en compte une seule variable de votre base de&lt;br /&gt;
donnez suivez la partie : &amp;quot;Recherche anomalie pour une seule variable&amp;quot;. Si vous voulez connaitre&lt;br /&gt;
les annomalies en prenant en comptes toutes les variables entrées dans votre documents csv&lt;br /&gt;
suivez la partie : &amp;quot;Recherche anomalie pour toute les variable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==3 Recherche anomalie pour toute les variables¶==&lt;br /&gt;
&lt;br /&gt;
Dans cette section nous prenons en compte toute les variables entrées pour les éléments de notre&lt;br /&gt;
dataset.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#Valeur que vous devez entrez&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nom_fichier = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#code à ne pas modifier&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
df = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
df_modif = pd.read_csv(nom_fichier)&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
&lt;br /&gt;
model.fit(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&lt;br /&gt;
anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
&lt;br /&gt;
print(anomaly)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la première ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset.&lt;br /&gt;
&lt;br /&gt;
==3 BIS Recherche anomalie pour une seule variable==&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez savoir qu’elles sont les valeurs anormales pour une seule variables, par exemple ne&lt;br /&gt;
prendre en compte que la variable de l’age dans une certaine population, il faut utiliser le code&lt;br /&gt;
suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;#Valeur que vous devez entrez&lt;br /&gt;
nom_fichier = &#039;&#039;&lt;br /&gt;
nom_variable =&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Reste du code à ne pas modifier&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
model.fit(df[[nom_variable]])&lt;br /&gt;
model.predict(df[[nom_variable]])&lt;br /&gt;
df[&#039;scores&#039;]=model.decision_function(df[[nom_variable]])&lt;br /&gt;
df[&#039;anomaly&#039;]=model.predict(df[[nom_variable]])&lt;br /&gt;
anomaly=df.loc[df[&#039;anomaly&#039;]==-1]&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la premiere ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset. Ainsi que le titre de la colonne de la variable que&lt;br /&gt;
vous voulez prendre en compte dans nom_variable.&lt;br /&gt;
&lt;br /&gt;
==4 Utiliser les résultats==&lt;br /&gt;
&lt;br /&gt;
Lancez le programme. Ce dernier va vous affichez les valeurs dites anormales. Vous pouvez&lt;br /&gt;
ensuite agir sur ces dernières en utilisant la variable anomaly_index qui est un tableau qui&lt;br /&gt;
contient tous les indices des anomalies détectées.&lt;br /&gt;
&lt;br /&gt;
=2)Explication plus précise du code=&lt;br /&gt;
&lt;br /&gt;
Voici une explication plus précise de chaque fonction utilisée dans le code donné dans le tuto.&lt;br /&gt;
&lt;br /&gt;
==1 Récupération des données==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, si nous avons bien suivi le tutoriel fournis nous avons déjà créée un fichier CSV qui&lt;br /&gt;
rassemble nos donnés. La fonction suivante permet de stocker toute ces informations dans une&lt;br /&gt;
variable en lisant le contenu de notre fichier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df = pd.read_csv(nom_fichier)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 2 Création du model ==&lt;br /&gt;
&lt;br /&gt;
Notre but maintenant est de définir le modèle utilisé par l’algorithme Isolation Forest ensuite. Cela&lt;br /&gt;
reviens à créer un objet contenant tous les paramètres donc la bibliothèque a besoin pour fonctionner.&lt;br /&gt;
&lt;br /&gt;
Pour cela vous allez devoir choisir des paramètres suivants vos besoins :&lt;br /&gt;
&lt;br /&gt;
===1) n_estimators===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir le nombre d&#039;estimateurs de base, c&#039;est-à-dire le nombre d&#039;arbres qui seront&lt;br /&gt;
construits dans la forêt.&lt;br /&gt;
&lt;br /&gt;
Plus le nombre d’arbre est élevé plus l’algorithme est fiable car les moyennes souffrirons moins des&lt;br /&gt;
valeurs écartées mais ces calculs prennent du temps et son couteux c’est pour cela qu’un nombre trop&lt;br /&gt;
élevé d’arbre serait du « gâchis » car la plupart du temps ils n’apportent rien car les anomalies étaient&lt;br /&gt;
déjà isolées avec moins d’arbres.&lt;br /&gt;
&lt;br /&gt;
On considère que 100 arbres sont suffisants pour quasiment toutes les applications courantes de&lt;br /&gt;
recherche d’anomalies c’est d’ailleurs la valeur par défaut.&lt;br /&gt;
&lt;br /&gt;
===2)max_samples===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir l’échantillon max soit le nombre d&#039;échantillons à tirer pour former chaque&lt;br /&gt;
estimateur de base.&lt;br /&gt;
&lt;br /&gt;
En effet lorsque l’on crée un arbre, surtout quand nous avons une grande banque de donnée nous&lt;br /&gt;
n’utilisons pas forcément tous les éléments de la base de donnée pour chaque arbres. Un échantillon&lt;br /&gt;
est créé pour n’utiliser que certaines données.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez changer cette valeur pour une valeur inferieur à 256 et aux nombres d’éléments dans&lt;br /&gt;
votre base de donnée si vous avez vraiment une contraintes de nombre d’opération à effectuer mais&lt;br /&gt;
celle si altèrera rapidement la qualité des résultats.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez mettre une valeur au dessus de 256 si votre base de donnée contient plus de 256&lt;br /&gt;
éléments et que vous n’avez pas peur d’une perte de rapidité et d’optimisation pour avoir un résultat&lt;br /&gt;
plus précis.&lt;br /&gt;
&lt;br /&gt;
Il est tout de même conseillé de laisser ce paramètre en paramétrage automatique celui-ci choisira la&lt;br /&gt;
valeur min(256, n_samples) qui pour la plupart des application est nettement appropriée.&lt;br /&gt;
Le programme créera donc un nombre correspondant d’échantillons qui seront utilisés pour créer&lt;br /&gt;
chaque arbres.&lt;br /&gt;
&lt;br /&gt;
===3) Contamination===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est le plus sensible et le plus délicat à choisir. Le taux de contamination est la proportion&lt;br /&gt;
d’anomalies attendues dans la base de données.&lt;br /&gt;
&lt;br /&gt;
Ce dernier est utilisé lors de l&#039;ajustement pour définir le seuil sur les scores des échantillons. Il est&lt;br /&gt;
essentiel car si nous affirmons une valeur pour ce paramètre le code nous donneras un nombre de&lt;br /&gt;
valeur anormales correspondant. Par exemple si nous entrons contamination=float(0.2) le programme&lt;br /&gt;
nous fournira 20% de valeurs aberrantes même si les scores d’anomalies en révèle plus ou moins.&lt;br /&gt;
La valeur par défaut est &#039;auto&#039;. Si &#039;auto&#039;, la valeur seuil sera déterminée comme dans l&#039;article original&lt;br /&gt;
d&#039;Isolation Forest.&lt;br /&gt;
&lt;br /&gt;
Si nous connaissons cette valeur en revanche par exemple si nous savons d’avance que nous voulons&lt;br /&gt;
enlever 10% des valeurs qui sont trop éloignées des autres nous pouvons l’indiquer tout en sachant&lt;br /&gt;
qu’elle est comprise entre (0, 0.5]&lt;br /&gt;
&lt;br /&gt;
===4) max_features ===&lt;br /&gt;
&lt;br /&gt;
Comme nous l’avons vu dans l’explication du principe de isolation forest, l’algorithme va créer&lt;br /&gt;
des séparations parmi les données jusqu’à isoler les différents éléments.&lt;br /&gt;
Or il n’est pas forcements nécessaire de continuer de créer des séparations jusqu’à ce que&lt;br /&gt;
tous les éléments de la base de données soit isolés. En effet comme nous avons vu les&lt;br /&gt;
éléments les plus difficiles à isoler ne sont pas ceux qui sont considérés comme anormal. Le&lt;br /&gt;
nombre de séparation créées peut donc être paramétré pour optimiser l’algorithme.&lt;br /&gt;
&lt;br /&gt;
La valeur par défaut est 1.0, on peut prendre une valeur différente mais cette dernière doit être&lt;br /&gt;
inferieur à 1.&lt;br /&gt;
&lt;br /&gt;
===5) bootstrap===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen, si on entre la valeur ‘Vrai’ cela indique que les tirages&lt;br /&gt;
d’échantillonnage pour chaque arbre est effectué avec remise, si ce paramètre est ‘Faux’ cela indique&lt;br /&gt;
cela indique que l’échantillonnage est fait sans remise.&lt;br /&gt;
Le réglage par défaut est False.&lt;br /&gt;
&lt;br /&gt;
===6) n_jobs===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre permet de définir le nombre de tâche à exécuter en parallèle pour l’utilisation des&lt;br /&gt;
fonction fit et predict que nous expliquons plus loin.&lt;br /&gt;
Il n’est pas utile de se soucier de ce paramètre à moins que nous ayons une dataset de très très&lt;br /&gt;
grande taille.&lt;br /&gt;
&lt;br /&gt;
Si sa valeur est ‘none’ une seule tâche est effectuée à la fois, si sa valeur est ‘-1’ le programme&lt;br /&gt;
utilisera alors tout le processeur disponible.&lt;br /&gt;
&lt;br /&gt;
===7) random_state===&lt;br /&gt;
Ce paramètre contrôle le caractère pseudo-aléatoire de l’échantillonnage et du choix des splits, pour&lt;br /&gt;
chaque étape de création d’arbre.&lt;br /&gt;
C’est un entier qui suivant sa valeur appellera les fonctions si dessous plusieurs fois afin de faire des&lt;br /&gt;
moyennes des résultats pour accroire le caractère aléatoire des tirages faits.&lt;br /&gt;
&lt;br /&gt;
===8) warm_start===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen qui si il est paramétrer sur Vrai, réutilise la solution de l&#039;appel&lt;br /&gt;
précédent pour s&#039;adapter et rajoute seulement des estimateur dans l’ensemble. Si le paramètre&lt;br /&gt;
est Faux une toute nouvelle forêt est créée.&lt;br /&gt;
Ce paramètre peut être utile si vous utilisez une très grande base de donée et que vous pensez&lt;br /&gt;
qu’une précision supplémentaire est nécessaire.&lt;br /&gt;
&lt;br /&gt;
Les paramètres conseillés sont les suivants :&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;, contamination= »auto »&lt;br /&gt;
,max_features=1.0, bootstrap=False, n_jobs=’None’, random_state=None,&lt;br /&gt;
warm_start=False)&lt;br /&gt;
&lt;br /&gt;
===4.3 Utilisation du model===&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons défini le modèle avec lequel nous voulons travailler nous devons l’utiliser&lt;br /&gt;
pour l’appliquer à nos données.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous allons utiliser la fonction fit qui va ajuster le modèle sur les données. En d’autres mots&lt;br /&gt;
cette fonction crée tous les arbres de la forêt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.fit(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous utilisons ensuite la fonction decision_function qui va trouver le score d&#039;anomalie de chaque&lt;br /&gt;
éléments en étudiants pour chacun leurs positions dans tout les arbres créés précédemment. Elle va&lt;br /&gt;
donc calculer le score d&#039;anomalie moyen de X des classificateurs de base.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.decision_function(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
La fonction predict va ensuite attribuer une valeur a chaque éléments qui indique si cet élément est&lt;br /&gt;
considéré comme normal (valeur 0) ou comme anomalie (-1) .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.predict(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour plus de lisibilité nous plaçons ces deux scores dans notre tableau de données grâce aux fonctions&lt;br /&gt;
suivantes :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
Finalement nous cherchons un affichage correcte des résultats et pour cela nous isolons toute les&lt;br /&gt;
lignes correspondants à des anomalies pour les mettre dans un tableau séparé. Nous en profitons pour&lt;br /&gt;
isoler les index des anomalies dans une variable qui pourrait nous être utile plus tard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
anomaly_index=list(anomaly.index)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et pour terminer nous affichons les lignes correspondants aux anomalies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour visualiser les erreurs nous pouvons utiliser le code suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;# valeur à entrer&lt;br /&gt;
var1 = &#039;’&lt;br /&gt;
var2 = &#039;&#039;&lt;br /&gt;
# Code à ne pas modifier&lt;br /&gt;
pred_scores = -1*model.score_samples(df)&lt;br /&gt;
plt.scatter(df[[var1]],df[[var2]], c=pred_scores, cmap=&#039;RdBu&#039;)&lt;br /&gt;
plt.colorbar(label=&#039;Simplified Anomaly Score&#039;)&lt;br /&gt;
show()&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez choisir les deux noms des colonnes des variables que vous voulez choisir comme abscisse et&lt;br /&gt;
ordonnées de votre graphique&lt;br /&gt;
Cet affichage permet de visualiser l’ensemble des données ainsi que leurs score d’anomalies associé.&lt;br /&gt;
Cet affichages est très révélateur pour les base de données de dimensions 2 voire 3 mais pour les&lt;br /&gt;
dimensions plus élevées cet affichage perd de son intérêt.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13961</id>
		<title>Wiki tuto</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Wiki_tuto&amp;diff=13961"/>
		<updated>2022-05-27T17:15:39Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Page créée avec « Tutoriel d’utilisation de l’algorithme Isolation forest  Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra comme... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutoriel d’utilisation de l’algorithme Isolation forest&lt;br /&gt;
&lt;br /&gt;
Bienvenu dans ce tutoriel d’utilisation de l’algorithme Isolation forest. Ce tutoriel vous apprendra&lt;br /&gt;
comment utiliser facilement cet algorithme pour analyser votre propre banque de données. Il vous&lt;br /&gt;
fournira le code nécessaire mais aussi vous expliquera quels paramètres modifier si vous souhaitez&lt;br /&gt;
modifier le code pour l’adapter à vos besoins.&lt;br /&gt;
&lt;br /&gt;
=1 ) Tutoriel=&lt;br /&gt;
&lt;br /&gt;
Pour utiliser ce tutoriel correctement il faut créer un fichier .py par exemple où on copie toute les&lt;br /&gt;
parties en italique entre barres.&lt;br /&gt;
&lt;br /&gt;
==1 Formatage des données==&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord vous devez formater vos données afin qu&#039;elles soient compatibles avec la suite de&lt;br /&gt;
ce tutoriel.&lt;br /&gt;
&lt;br /&gt;
Pour cela créez un tableau sur excel ou autre tableur. La première colonne est l&#039;identifiant qui&lt;br /&gt;
vous permettra d&#039;identifier rapidement les anomalies qui vous seront indiquées, peut être le&lt;br /&gt;
numéro de la ligne par exemple.&lt;br /&gt;
&lt;br /&gt;
Ensuite chaque colonne dont on mettra le titre en ligne 1 contiendra les valeurs d&#039;une&lt;br /&gt;
caractéristique pour chaque élément de la base de données.&lt;br /&gt;
Finalement, enregistrez ce document sous le format cvs séparé par des virgules dans un&lt;br /&gt;
dossier de votre choix.&lt;br /&gt;
&lt;br /&gt;
==2 Import des bibliothèques==&lt;br /&gt;
&lt;br /&gt;
Vous devez maintenant créer un fichier dans le MEME dossier que celui où vous avez mis votre&lt;br /&gt;
dataset. Ce fichier est celui où nous allons écrire le programme une extension .py est donc conseillée.&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement de l’algorithme comme nous l’avons vu plus haut est assez complexe mais&lt;br /&gt;
heureusement des bibliothèque assez simplifiée ont étés crées ce qui va nous simplifier grandement&lt;br /&gt;
la tâche. Malheureusement ceci peut aussi nous désavantager car les seules fonctions qui sont&lt;br /&gt;
données sont très opaque et ne laisse peut de place à la compréhension du code interne et à la&lt;br /&gt;
modification de ce dernier. C’est pour cela que nous allons essayer de nous concentrer sur la&lt;br /&gt;
compréhension des arguments que nous donnons aux fonctions que nous allons utiliser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;import numpy as np&lt;br /&gt;
import pandas as pd&lt;br /&gt;
import seaborn as sns&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
from sklearn.ensemble import IsolationForest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Si vous voulez trouver les anomalies en prenant en compte une seule variable de votre base de&lt;br /&gt;
donnez suivez la partie : &amp;quot;Recherche anomalie pour une seule variable&amp;quot;. Si vous voulez connaitre&lt;br /&gt;
les annomalies en prenant en comptes toutes les variables entrées dans votre documents csv&lt;br /&gt;
suivez la partie : &amp;quot;Recherche anomalie pour toute les variable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==3 Recherche anomalie pour toute les variables¶==&lt;br /&gt;
&lt;br /&gt;
Dans cette section nous prenons en compte toute les variables entrées pour les éléments de notre&lt;br /&gt;
dataset.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
#Valeur que vous devez entrez&lt;br /&gt;
nom_fichier = &#039;&#039;&lt;br /&gt;
#code à ne pas modifier&lt;br /&gt;
df = pd.read_csv(nom_fichier)&lt;br /&gt;
df_modif = pd.read_csv(nom_fichier)&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
model.fit(df)&lt;br /&gt;
df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la première ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset.&lt;br /&gt;
&lt;br /&gt;
==3 BIS Recherche anomalie pour une seule variable==&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez savoir qu’elles sont les valeurs anormales pour une seule variables, par exemple ne&lt;br /&gt;
prendre en compte que la variable de l’age dans une certaine population, il faut utiliser le code&lt;br /&gt;
suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;#Valeur que vous devez entrez&lt;br /&gt;
nom_fichier = &#039;&#039;&lt;br /&gt;
nom_variable =&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# Reste du code à ne pas modifier&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;,&lt;br /&gt;
contamination=float(0.2),max_features=1.0)&lt;br /&gt;
model.fit(df[[nom_variable]])&lt;br /&gt;
model.predict(df[[nom_variable]])&lt;br /&gt;
df[&#039;scores&#039;]=model.decision_function(df[[nom_variable]])&lt;br /&gt;
df[&#039;anomaly&#039;]=model.predict(df[[nom_variable]])&lt;br /&gt;
anomaly=df.loc[df[&#039;anomaly&#039;]==-1]&lt;br /&gt;
anomaly_index=list(anomaly.index)&lt;br /&gt;
print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Veuillez entrer le nom du fichier entre les guillemets sur la premiere ligne. Cela correspond au nom&lt;br /&gt;
du fichier créé en étape 1 contenant votre dataset. Ainsi que le titre de la colonne de la variable que&lt;br /&gt;
vous voulez prendre en compte dans nom_variable.&lt;br /&gt;
&lt;br /&gt;
==4 Utiliser les résultats==&lt;br /&gt;
&lt;br /&gt;
Lancez le programme. Ce dernier va vous affichez les valeurs dites anormales. Vous pouvez&lt;br /&gt;
ensuite agir sur ces dernières en utilisant la variable anomaly_index qui est un tableau qui&lt;br /&gt;
contient tous les indices des anomalies détectées.&lt;br /&gt;
&lt;br /&gt;
=2)Explication plus précise du code=&lt;br /&gt;
&lt;br /&gt;
Voici une explication plus précise de chaque fonction utilisée dans le code donné dans le tuto.&lt;br /&gt;
&lt;br /&gt;
==1 Récupération des données==&lt;br /&gt;
&lt;br /&gt;
Pour commencer, si nous avons bien suivi le tutoriel fournis nous avons déjà créée un fichier CSV qui&lt;br /&gt;
rassemble nos donnés. La fonction suivante permet de stocker toute ces informations dans une&lt;br /&gt;
variable en lisant le contenu de notre fichier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df = pd.read_csv(nom_fichier)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== 2 Création du model ==&lt;br /&gt;
&lt;br /&gt;
Notre but maintenant est de définir le modèle utilisé par l’algorithme Isolation Forest ensuite. Cela&lt;br /&gt;
reviens à créer un objet contenant tous les paramètres donc la bibliothèque a besoin pour fonctionner.&lt;br /&gt;
&lt;br /&gt;
Pour cela vous allez devoir choisir des paramètres suivants vos besoins :&lt;br /&gt;
&lt;br /&gt;
===1) n_estimators===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir le nombre d&#039;estimateurs de base, c&#039;est-à-dire le nombre d&#039;arbres qui seront&lt;br /&gt;
construits dans la forêt.&lt;br /&gt;
&lt;br /&gt;
Plus le nombre d’arbre est élevé plus l’algorithme est fiable car les moyennes souffrirons moins des&lt;br /&gt;
valeurs écartées mais ces calculs prennent du temps et son couteux c’est pour cela qu’un nombre trop&lt;br /&gt;
élevé d’arbre serait du « gâchis » car la plupart du temps ils n’apportent rien car les anomalies étaient&lt;br /&gt;
déjà isolées avec moins d’arbres.&lt;br /&gt;
&lt;br /&gt;
On considère que 100 arbres sont suffisants pour quasiment toutes les applications courantes de&lt;br /&gt;
recherche d’anomalies c’est d’ailleurs la valeur par défaut.&lt;br /&gt;
&lt;br /&gt;
===2)max_samples===&lt;br /&gt;
&lt;br /&gt;
Il s’agit ici de choisir l’échantillon max soit le nombre d&#039;échantillons à tirer pour former chaque&lt;br /&gt;
estimateur de base.&lt;br /&gt;
&lt;br /&gt;
En effet lorsque l’on crée un arbre, surtout quand nous avons une grande banque de donnée nous&lt;br /&gt;
n’utilisons pas forcément tous les éléments de la base de donnée pour chaque arbres. Un échantillon&lt;br /&gt;
est créé pour n’utiliser que certaines données.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez changer cette valeur pour une valeur inferieur à 256 et aux nombres d’éléments dans&lt;br /&gt;
votre base de donnée si vous avez vraiment une contraintes de nombre d’opération à effectuer mais&lt;br /&gt;
celle si altèrera rapidement la qualité des résultats.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez mettre une valeur au dessus de 256 si votre base de donnée contient plus de 256&lt;br /&gt;
éléments et que vous n’avez pas peur d’une perte de rapidité et d’optimisation pour avoir un résultat&lt;br /&gt;
plus précis.&lt;br /&gt;
&lt;br /&gt;
Il est tout de même conseillé de laisser ce paramètre en paramétrage automatique celui-ci choisira la&lt;br /&gt;
valeur min(256, n_samples) qui pour la plupart des application est nettement appropriée.&lt;br /&gt;
Le programme créera donc un nombre correspondant d’échantillons qui seront utilisés pour créer&lt;br /&gt;
chaque arbres.&lt;br /&gt;
&lt;br /&gt;
===3) Contamination===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est le plus sensible et le plus délicat à choisir. Le taux de contamination est la proportion&lt;br /&gt;
d’anomalies attendues dans la base de données.&lt;br /&gt;
&lt;br /&gt;
Ce dernier est utilisé lors de l&#039;ajustement pour définir le seuil sur les scores des échantillons. Il est&lt;br /&gt;
essentiel car si nous affirmons une valeur pour ce paramètre le code nous donneras un nombre de&lt;br /&gt;
valeur anormales correspondant. Par exemple si nous entrons contamination=float(0.2) le programme&lt;br /&gt;
nous fournira 20% de valeurs aberrantes même si les scores d’anomalies en révèle plus ou moins.&lt;br /&gt;
La valeur par défaut est &#039;auto&#039;. Si &#039;auto&#039;, la valeur seuil sera déterminée comme dans l&#039;article original&lt;br /&gt;
d&#039;Isolation Forest.&lt;br /&gt;
&lt;br /&gt;
Si nous connaissons cette valeur en revanche par exemple si nous savons d’avance que nous voulons&lt;br /&gt;
enlever 10% des valeurs qui sont trop éloignées des autres nous pouvons l’indiquer tout en sachant&lt;br /&gt;
qu’elle est comprise entre (0, 0.5]&lt;br /&gt;
&lt;br /&gt;
===4) max_features ===&lt;br /&gt;
&lt;br /&gt;
Comme nous l’avons vu dans l’explication du principe de isolation forest, l’algorithme va créer&lt;br /&gt;
des séparations parmi les données jusqu’à isoler les différents éléments.&lt;br /&gt;
Or il n’est pas forcements nécessaire de continuer de créer des séparations jusqu’à ce que&lt;br /&gt;
tous les éléments de la base de données soit isolés. En effet comme nous avons vu les&lt;br /&gt;
éléments les plus difficiles à isoler ne sont pas ceux qui sont considérés comme anormal. Le&lt;br /&gt;
nombre de séparation créées peut donc être paramétré pour optimiser l’algorithme.&lt;br /&gt;
&lt;br /&gt;
La valeur par défaut est 1.0, on peut prendre une valeur différente mais cette dernière doit être&lt;br /&gt;
inferieur à 1.&lt;br /&gt;
&lt;br /&gt;
===5) bootstrap===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen, si on entre la valeur ‘Vrai’ cela indique que les tirages&lt;br /&gt;
d’échantillonnage pour chaque arbre est effectué avec remise, si ce paramètre est ‘Faux’ cela indique&lt;br /&gt;
cela indique que l’échantillonnage est fait sans remise.&lt;br /&gt;
Le réglage par défaut est False.&lt;br /&gt;
&lt;br /&gt;
===6) n_jobs===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre permet de définir le nombre de tâche à exécuter en parallèle pour l’utilisation des&lt;br /&gt;
fonction fit et predict que nous expliquons plus loin.&lt;br /&gt;
Il n’est pas utile de se soucier de ce paramètre à moins que nous ayons une dataset de très très&lt;br /&gt;
grande taille.&lt;br /&gt;
&lt;br /&gt;
Si sa valeur est ‘none’ une seule tâche est effectuée à la fois, si sa valeur est ‘-1’ le programme&lt;br /&gt;
utilisera alors tout le processeur disponible.&lt;br /&gt;
&lt;br /&gt;
===7) random_state===&lt;br /&gt;
Ce paramètre contrôle le caractère pseudo-aléatoire de l’échantillonnage et du choix des splits, pour&lt;br /&gt;
chaque étape de création d’arbre.&lt;br /&gt;
C’est un entier qui suivant sa valeur appellera les fonctions si dessous plusieurs fois afin de faire des&lt;br /&gt;
moyennes des résultats pour accroire le caractère aléatoire des tirages faits.&lt;br /&gt;
&lt;br /&gt;
===8) warm_start===&lt;br /&gt;
&lt;br /&gt;
Ce paramètre est un booléen qui si il est paramétrer sur Vrai, réutilise la solution de l&#039;appel&lt;br /&gt;
précédent pour s&#039;adapter et rajoute seulement des estimateur dans l’ensemble. Si le paramètre&lt;br /&gt;
est Faux une toute nouvelle forêt est créée.&lt;br /&gt;
Ce paramètre peut être utile si vous utilisez une très grande base de donée et que vous pensez&lt;br /&gt;
qu’une précision supplémentaire est nécessaire.&lt;br /&gt;
&lt;br /&gt;
Les paramètres conseillés sont les suivants :&lt;br /&gt;
&lt;br /&gt;
model=IsolationForest(n_estimators=50, max_samples=&#039;auto&#039;, contamination= »auto »&lt;br /&gt;
,max_features=1.0, bootstrap=False, n_jobs=’None’, random_state=None,&lt;br /&gt;
warm_start=False)&lt;br /&gt;
&lt;br /&gt;
===4.3 Utilisation du model===&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons défini le modèle avec lequel nous voulons travailler nous devons l’utiliser&lt;br /&gt;
pour l’appliquer à nos données.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous allons utiliser la fonction fit qui va ajuster le modèle sur les données. En d’autres mots&lt;br /&gt;
cette fonction crée tous les arbres de la forêt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.fit(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous utilisons ensuite la fonction decision_function qui va trouver le score d&#039;anomalie de chaque&lt;br /&gt;
éléments en étudiants pour chacun leurs positions dans tout les arbres créés précédemment. Elle va&lt;br /&gt;
donc calculer le score d&#039;anomalie moyen de X des classificateurs de base.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.decision_function(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
La fonction predict va ensuite attribuer une valeur a chaque éléments qui indique si cet élément est&lt;br /&gt;
considéré comme normal (valeur 0) ou comme anomalie (-1) .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;model.predict(df)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour plus de lisibilité nous plaçons ces deux scores dans notre tableau de données grâce aux fonctions&lt;br /&gt;
suivantes :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;df_modif[&#039;scores&#039;]=model.decision_function(df)&lt;br /&gt;
df_modif[&#039;anomaly&#039;]=model.predict(df)&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
Finalement nous cherchons un affichage correcte des résultats et pour cela nous isolons toute les&lt;br /&gt;
lignes correspondants à des anomalies pour les mettre dans un tableau séparé. Nous en profitons pour&lt;br /&gt;
isoler les index des anomalies dans une variable qui pourrait nous être utile plus tard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;anomaly=df_modif.loc[df_modif[&#039;anomaly&#039;]==-1]&lt;br /&gt;
anomaly_index=list(anomaly.index)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Et pour terminer nous affichons les lignes correspondants aux anomalies.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;print(anomaly)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour visualiser les erreurs nous pouvons utiliser le code suivant.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;# valeur à entrer&lt;br /&gt;
var1 = &#039;’&lt;br /&gt;
var2 = &#039;&#039;&lt;br /&gt;
# Code à ne pas modifier&lt;br /&gt;
pred_scores = -1*model.score_samples(df)&lt;br /&gt;
plt.scatter(df[[var1]],df[[var2]], c=pred_scores, cmap=&#039;RdBu&#039;)&lt;br /&gt;
plt.colorbar(label=&#039;Simplified Anomaly Score&#039;)&lt;br /&gt;
show()&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Veuillez choisir les deux noms des colonnes des variables que vous voulez choisir comme abscisse et&lt;br /&gt;
ordonnées de votre graphique&lt;br /&gt;
Cet affichage permet de visualiser l’ensemble des données ainsi que leurs score d’anomalies associé.&lt;br /&gt;
Cet affichages est très révélateur pour les base de données de dimensions 2 voire 3 mais pour les&lt;br /&gt;
dimensions plus élevées cet affichage perd de son intérêt.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13958</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13958"/>
		<updated>2022-05-27T17:05:12Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* Tuto Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au sein d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voitures, ordinateurs, montres connectées…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être dû à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
 &lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest3.png]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest4.png]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest5.png]]&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.png]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema6.png]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué.&lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
&lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
&lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tutoriel.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ou sur la page wiki suivante : &lt;br /&gt;
[[wiki tuto]]&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13957</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13957"/>
		<updated>2022-05-27T17:03:37Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* Tuto Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au sein d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voitures, ordinateurs, montres connectées…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être dû à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
 &lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest3.png]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest4.png]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest5.png]]&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.png]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema6.png]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué.&lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
&lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
&lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Tutoriel.pdf]]&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Tutoriel.pdf&amp;diff=13956</id>
		<title>Fichier:Tutoriel.pdf</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Tutoriel.pdf&amp;diff=13956"/>
		<updated>2022-05-27T17:03:07Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13940</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13940"/>
		<updated>2022-05-27T16:36:36Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* Tuto Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au sein d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voitures, ordinateurs, montres connectées…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être dû à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
 &lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest3.png]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest4.png]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest5.png]]&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.png]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema6.png]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué.&lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
&lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
&lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Exemple.pdf]]&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schema6.png&amp;diff=13939</id>
		<title>Fichier:Schema6.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schema6.png&amp;diff=13939"/>
		<updated>2022-05-27T16:33:13Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Mdesmet a téléversé une nouvelle version de Fichier:Schema6.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schema5.png&amp;diff=13938</id>
		<title>Fichier:Schema5.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schema5.png&amp;diff=13938"/>
		<updated>2022-05-27T16:32:36Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Mdesmet a téléversé une nouvelle version de Fichier:Schema5.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest5.png&amp;diff=13937</id>
		<title>Fichier:Schemaforest5.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest5.png&amp;diff=13937"/>
		<updated>2022-05-27T16:32:07Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Mdesmet a téléversé une nouvelle version de Fichier:Schemaforest5.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest4.png&amp;diff=13936</id>
		<title>Fichier:Schemaforest4.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest4.png&amp;diff=13936"/>
		<updated>2022-05-27T16:31:18Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Mdesmet a téléversé une nouvelle version de Fichier:Schemaforest4.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest3.png&amp;diff=13935</id>
		<title>Fichier:Schemaforest3.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest3.png&amp;diff=13935"/>
		<updated>2022-05-27T16:30:38Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Mdesmet a téléversé une nouvelle version de Fichier:Schemaforest3.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest3.png&amp;diff=13934</id>
		<title>Fichier:Schemaforest3.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest3.png&amp;diff=13934"/>
		<updated>2022-05-27T16:30:18Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Mdesmet a téléversé une nouvelle version de Fichier:Schemaforest3.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest2.png&amp;diff=13933</id>
		<title>Fichier:Schemaforest2.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest2.png&amp;diff=13933"/>
		<updated>2022-05-27T16:29:45Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Mdesmet a téléversé une nouvelle version de Fichier:Schemaforest2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest1.png&amp;diff=13931</id>
		<title>Fichier:Schemaforest1.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest1.png&amp;diff=13931"/>
		<updated>2022-05-27T16:25:17Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Mdesmet a téléversé une nouvelle version de Fichier:Schemaforest1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;n&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13929</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13929"/>
		<updated>2022-05-27T16:23:02Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* Tuto Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au sein d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voitures, ordinateurs, montres connectées…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être dû à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
 &lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest3.png]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest4.png]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest5.png]]&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.png]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema6.png]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué.&lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
&lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
&lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant :&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13928</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13928"/>
		<updated>2022-05-27T16:22:15Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* Tuto Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au sein d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voitures, ordinateurs, montres connectées…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être dû à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
 &lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest3.png]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest4.png]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest5.png]]&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.png]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema6.png]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué.&lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
&lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
&lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemple d&#039;utilisation du code&lt;br /&gt;
&lt;br /&gt;
[[bd]]&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13927</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13927"/>
		<updated>2022-05-27T16:20:50Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au sein d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voitures, ordinateurs, montres connectées…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être dû à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
 &lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest3.png]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest4.png]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest5.png]]&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.png]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema6.png]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué.&lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
&lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
&lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13925</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13925"/>
		<updated>2022-05-27T16:17:38Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* Résumé du principe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au seins d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voiture, ordinateur, montre connectée…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être du à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
 &lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest3.png]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest4.png]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest5.png]]&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.png]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema6.png]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué.&lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
&lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
&lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schema6.png&amp;diff=13924</id>
		<title>Fichier:Schema6.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schema6.png&amp;diff=13924"/>
		<updated>2022-05-27T16:17:07Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13923</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13923"/>
		<updated>2022-05-27T16:16:49Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* C)	Etude de la foret */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au seins d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voiture, ordinateur, montre connectée…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être du à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
 &lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest3.png]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest4.png]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest5.png]]&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.png]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema6.png]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué.&lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schema5.png&amp;diff=13922</id>
		<title>Fichier:Schema5.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schema5.png&amp;diff=13922"/>
		<updated>2022-05-27T16:15:58Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Mdesmet a téléversé une nouvelle version de Fichier:Schema5.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13921</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13921"/>
		<updated>2022-05-27T16:14:53Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* C)	Etude de la foret */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au seins d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voiture, ordinateur, montre connectée…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être du à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
 &lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest3.png]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest4.png]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest5.png]]&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.png]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.png]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué.&lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest5.png&amp;diff=13917</id>
		<title>Fichier:Schemaforest5.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest5.png&amp;diff=13917"/>
		<updated>2022-05-27T16:08:05Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Mdesmet a téléversé une nouvelle version de Fichier:Schemaforest5.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest4.png&amp;diff=13916</id>
		<title>Fichier:Schemaforest4.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest4.png&amp;diff=13916"/>
		<updated>2022-05-27T16:07:28Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Mdesmet a téléversé une nouvelle version de Fichier:Schemaforest4.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schema5.png&amp;diff=13913</id>
		<title>Fichier:Schema5.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schema5.png&amp;diff=13913"/>
		<updated>2022-05-27T16:05:01Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest5.png&amp;diff=13911</id>
		<title>Fichier:Schemaforest5.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest5.png&amp;diff=13911"/>
		<updated>2022-05-27T16:03:59Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest4.png&amp;diff=13909</id>
		<title>Fichier:Schemaforest4.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest4.png&amp;diff=13909"/>
		<updated>2022-05-27T16:03:27Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest3.png&amp;diff=13908</id>
		<title>Fichier:Schemaforest3.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest3.png&amp;diff=13908"/>
		<updated>2022-05-27T16:00:28Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest2.png&amp;diff=13907</id>
		<title>Fichier:Schemaforest2.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest2.png&amp;diff=13907"/>
		<updated>2022-05-27T15:59:37Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest1.png&amp;diff=13905</id>
		<title>Fichier:Schemaforest1.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schemaforest1.png&amp;diff=13905"/>
		<updated>2022-05-27T15:57:35Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : n&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;n&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13904</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13904"/>
		<updated>2022-05-27T15:57:01Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* A) La construction d’un arbre */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au seins d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voiture, ordinateur, montre connectée…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être du à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
 &lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest3.png]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest4.png]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schemaforest5.png]]&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué. &lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schema1.png&amp;diff=13903</id>
		<title>Fichier:Schema1.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Schema1.png&amp;diff=13903"/>
		<updated>2022-05-27T15:55:08Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13883</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13883"/>
		<updated>2022-05-27T15:05:16Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* Les limites de l’algorithme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au seins d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voiture, ordinateur, montre connectée…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être du à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
 &lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema3.jpg]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema4.jpg]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué. &lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13882</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13882"/>
		<updated>2022-05-27T15:04:54Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au seins d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voiture, ordinateur, montre connectée…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être du à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
= Fonctionnement de l’algorithme Isolation Forest =&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
 &lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
==A) La construction d’un arbre ==&lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 1 :  Sélection d’une variable et d’un seuil===&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Etape 2 : étape itérative===&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema3.jpg]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema4.jpg]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== B) Construction d’une foret == &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
== C)	Etude de la foret ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué. &lt;br /&gt;
&lt;br /&gt;
==Résumé du principe==&lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tuto Code =&lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Les limites de l’algorithme =&lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
-	&#039;&#039;&#039;Le masquage&#039;&#039;&#039; : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;L’inondation&#039;&#039;&#039; : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Donnés de haute dimension&#039;&#039;&#039; : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	&#039;&#039;&#039;Fausses anomalies&#039;&#039;&#039; : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13879</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13879"/>
		<updated>2022-05-27T14:57:19Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : /* Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
=Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ?=&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au seins d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voiture, ordinateur, montre connectée…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être du à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
== Fonctionnement de l’algorithme Isolation Forest ==&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
&lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
A) La construction d’un arbre &lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etape 1 :  Sélection d’une variable et d’un seuil&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etape 2 : étape itérative&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema3.jpg]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema4.jpg]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;B) Construction d’une foret&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;C)	Etude de la foret&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Résumé du principe&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Tuto Code &lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) Les limites de l’algorithme &lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
-	Le masquage : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	L’inondation : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	Donnés de haute dimension : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	Fausses anomalies : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13647</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13647"/>
		<updated>2022-05-17T16:07:19Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
== Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ? ==&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au seins d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voiture, ordinateur, montre connectée…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être du à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
== Fonctionnement de l’algorithme Isolation Forest ==&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
&lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
A) La construction d’un arbre &lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema1.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etape 1 :  Sélection d’une variable et d’un seuil&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous sélectionnons aléatoirement une variable : ici nous avons le choix entre X et Y( mais en réalité bien plus de variables peuvent être prises en compte).&lt;br /&gt;
Nous repérons les valeurs  : &lt;br /&gt;
-	 u max qui correspond à la valeur maximale prise par un élément de notre dataset pour cette variable &lt;br /&gt;
-	u min qui correspond à la valeur minimale prise par un élément de notre dataset pour cette variable. &lt;br /&gt;
Après avoir trouvé cette plage de valeur, un valeur aléatoire de cette dernière est isolée est appelée u1. &lt;br /&gt;
Nous réalisons alors une découpe (aussi appelée split) de nos données au  niveau de u1 et nous commençons donc la création de notre arbres qui va isoler :&lt;br /&gt;
-	à droite : les éléments de notre population qui possèdent pour la variable sélectionnée une valeur inférieur ou égale à u1&lt;br /&gt;
-	à gauche :  les éléments de notre population qui possèdent pour la variable sélectionnée une valeur supérieur  à u1&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Etape 2 : étape itérative&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous réitérons l’étape 1 jusqu’à ce que nous ayons un élément « isolé » dans notre arbre.&lt;br /&gt;
Alors nous créons le seuil U2 dans Y cette fois (aléatoirement) et nous complétons notre arbre. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema3.jpg]]&lt;br /&gt;
&lt;br /&gt;
Ainsi de suite jusqu’à l’isolation d’un élément au moins. &lt;br /&gt;
Dans notre exemple trois étapes suffisent pour isoler les deux points ici mis en noir.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema4.jpg]]&lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons isoler ces deux points nous les enlevons de notre processus de calcul, autrement dit nous ne les prenons plus en compte dans les calculs de u min et u max et nous continuons d’itérer notre procédure jusqu’à ce que tout les points soient isolés dans une branche de l’arbre.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat final dans notre exemple &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;B) Construction d’une foret&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
La création d’un seul et unique arbre ne suffit pas pour répondre tout de suite à notre problématique. &lt;br /&gt;
En effet il est possible d’isoler à tort un éléments suite à des valeurs très spécifiques choisies( par l’aléatoire).&lt;br /&gt;
&lt;br /&gt;
Pour pallier ce risque nous allons relancer le processus avec la même méthode mais avec des sélections de variables et de seuils qui seront forcément différentes étant donné que ces valeurs sont choisies aléatoirement. Nous obtiendrons donc une « foret » d’arbres que nous allons étudier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;C)	Etude de la foret&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
Maintenant que nous avons créé une foret d’arbre nous allons étudier ces derniers et ce qu’ils nous indiquent sur la population étudiée . &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous considérons toujours l’idée qu’une valeur atypique est plus facile à isoler autrement dit : plus le nombre de split nécessaire pour isoler une observation particulière est bas plus il y a de chance que cette dernière soit une anomalie. &lt;br /&gt;
&lt;br /&gt;
Nous parcourons donc chaque arbre et nous attribuons à chaque éléments de notre population un score d’isolation. Celui-ci est d’autant proche de 1 que le nombre de split qui a été réalisé pour isolé l’élément est faible. Et il est d’autant proche de 0.5 que le nombre de split qui a été réalisé pour isolé l’élément est élevé. Cela correspond à la profondeur de l’arbre qui a mené à ce point  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Par exemple pour ce point qui semble anormal il a fallut 3 split pour l’isoler. Son score est donc proche de 1. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Autre exemple pour ce point qui semble normal il a fallut 7 split pour l’isoler. Son score est donc proche de 0,5. &lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema5.jpg]]&lt;br /&gt;
&lt;br /&gt;
Après avoir relevé les scores de chaque éléments pour chaque arbres de la foret nous faisons une moyenne pour chaque individu de la population ce qui lui donne un score d’anomalie définitif . Puis nous isolons les éléments qui ont les scores les plus élevés qui sont ceux qui ont le plus de chance d’être atypique. Le nombre d’éléments relevés dépend du taux d’anomalie précédemment indiqué. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Résumé du principe&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
La détection d’anomalie d’erreur se fait en deux grandes étapes : &lt;br /&gt;
1.	La construction d’iTrees grâce à un ensemble de donné d’apprentissage &lt;br /&gt;
2.	Chaque instance de l’ensemble de test se voit attribué un score d’anomalie grâce à l’analyse de la foret créée a l’étape précédente &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Tuto Code &lt;br /&gt;
&lt;br /&gt;
Un des objectifs de ce projet était de créer un tutoriel permettant à toute personne d&#039;utiliser facilement cet algorithme pour détecter des anomalie dans un dataset donné.&lt;br /&gt;
&lt;br /&gt;
Voir le fichier sur le lien suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) Les limites de l’algorithme &lt;br /&gt;
&lt;br /&gt;
Cet algorithme fonctionne très bien surtout sur les échantillons qui possèdent « peu » d’éléments ce qui est intéressant étant donné que la plupart des autres méthodes privilégient généralement une grande taille d’échantillonnage. &lt;br /&gt;
Quelques limites de cette méthode doivent tout de même êtres prisent en compte :&lt;br /&gt;
-	Le masquage : Lorsque le nombre d’anomalie est trop élevé il peut arriver que celles-ci se regroupent dans un groupe dense et grand ce qui rend l’isolation de ces dernières plus difficile. Cela peut donc impacter la détection de ces points comme anomalie.&lt;br /&gt;
&lt;br /&gt;
-	L’inondation : si les instances normales sont trop proches des anomalies il est plus fastidieux d’isoler ces dernière ce qui tout comme le masquage impacte la bonne détection d’une anomalie comme telle du à une augmentation de split nécessaire pour l’isoler&lt;br /&gt;
&lt;br /&gt;
-	Donnés de haute dimension : Cette méthode étant basée sur la distance elle est altérée lorsque les éléments étudiés sont de trop hautes dimensions du aux fait que les points soient clairsemés dans l’espace de dimension élevé&lt;br /&gt;
&lt;br /&gt;
-	Fausses anomalies : D’autre part le système forest prend en paramètre un pourcentage de contamination (déjà limite en soi car il faut déjà avoir une idée du pourcentage de nos anomalies avant de lancé le programme) et ce pourcentage est respecté même si aucune anomalie ou une proportion plus faible d’anomalie est détectée. On entend par la que si 10% d’anomalie ont étés annoncé le programme nous renverra 10% d’anomalies même si tout les scores d’anomalies sont tous très proches et donc qu’aucune différence significative peut être observée entre les éléments du plan.&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13646</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13646"/>
		<updated>2022-05-17T15:26:50Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
== Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but ? ==&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au seins d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voiture, ordinateur, montre connectée…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être du à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
== Fonctionnement de l’algorithme Isolation Forest ==&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
&lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
A) La construction d’un arbre &lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:schema1.jpg]]&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13645</id>
		<title>Détection d’anomalies par Isolation Forest : application pour l’industrie 4.0</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=D%C3%A9tection_d%E2%80%99anomalies_par_Isolation_Forest_:_application_pour_l%E2%80%99industrie_4.0&amp;diff=13645"/>
		<updated>2022-05-17T15:20:09Z</updated>

		<summary type="html">&lt;p&gt;Mdesmet : Page créée avec « L&amp;#039;objectif de ce projet était d&amp;#039;étudier et comprendre l&amp;#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&amp;#039;utilisation.    1) Qu’est-ce que l’algorit... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L&#039;objectif de ce projet était d&#039;étudier et comprendre l&#039;algorithme Isolation Forest afin de pouvoir rédiger un tutoriel d&#039;utilisation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Qu’est-ce que l’algorithme de détection d’anomalie Isolation Forest et quel est son but&lt;br /&gt;
&lt;br /&gt;
En quelque mots l’algorithme Isolation Forest est un algorithme non supervisé de machine Learning. Il est conçu pour détecter des valeurs anormales au seins d’un ensemble de données. &lt;br /&gt;
&lt;br /&gt;
En effet de nos jours, beaucoup de données sont collectées grâce aux appareils connectés : voiture, ordinateur, montre connectée…. Ce développement de l’Internet of things nous impose de savoir collecter et traiter toute ces données de manière optimisée et efficace. Pour cela une des première étapes après la collecte des donnée est la détection d’anomalie. &lt;br /&gt;
&lt;br /&gt;
Une anomalie dans un jeu de donnée est une valeur qui dénote des autres, ceci peut être du à un mauvais fonctionnement d’un capteur ( une température de 10 000 °C dans un four ) ou bien une action qui sors de l’ordinaire de la part de l’utilisateur (un retrait de 3 000 000 $ à un distributeur de billet d’un petit village). Détecter ces anomalies permet de pouvoir identifier un possible disfonctionnement qu’il faudra ignorer dans nos prochains calculs ou bien d’isoler des valeurs que nous allons étudier pour comprendre les causes de leur irrégularités. (par exemple détecter des actes de fraudes dans les paiements en carte de crédit).&lt;br /&gt;
&lt;br /&gt;
2) Comment fonctionne l’algorithme Isolation Forest&lt;br /&gt;
&lt;br /&gt;
Définitions utiles : &lt;br /&gt;
&lt;br /&gt;
Dataset : Jeu de données en français est un ensemble de données associé , la plupart du temps représenté par un tableau ou un graph. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
L’idée principale est de calculer un score d’anomalie pour chaque observation du dataset puis de comparer ces scores dans un second temps pour isoler les anomalies. Ceci est possible car nous nous basons sur l’idée qu’une donnée anormale sera plus facile à isoler qu’une donnée standard dû à son écart à ces dernières.&lt;br /&gt;
&lt;br /&gt;
Pour comprendre le fonctionnement de cet algorithme nous allons l’illustrer avec un exemple en 2 dimensions X et Y.&lt;br /&gt;
&lt;br /&gt;
2.A La construction d’un arbre &lt;br /&gt;
&lt;br /&gt;
Nous plaçons nos données dans un graphique qui considère Y en fonction de X.&lt;br /&gt;
Voici à quoi ressemble notre data set dans un premier temps&lt;/div&gt;</summary>
		<author><name>Mdesmet</name></author>
	</entry>
</feed>