[PYTHON] SE, débutant en analyse de données, apprend avec l'équipe de science des données vol.1

introduction

salut! Il s'agit de Nakagawa de Hitachi, Ltd. Lumada Data Science Lab..

Chez Lumada Data Science Lab., Nous acceptons activement les SE internes en tant que stagiaires et formons des data scientists dans le but d'améliorer la qualité des propositions à nos clients. Dans la formation pratique, nous questionnons régulièrement le sujet de l'analyse des données et discutons des questions qui se posent sur le sujet avec les membres de l'institut engagés dans des travaux d'analyse de données. Dans cet article, je voudrais présenter le contenu de l'analyse et de la discussion des données.

En partageant des solutions à des problèmes faciles pour les personnes qui commencent tout juste à analyser des données et en partageant des techniques efficaces pour ceux qui sont déjà dans le secteur de l'analyse de données, nous pouvons partager ce qu'est l'analyse de données. J'espère que ce sera l'occasion de réfléchir.

Profil d'apprenti

Contenu de l'exercice

Ici, nous aimerions présenter les détails des exercices que M. Matsushita a résumés.

thème

  1. CRISP-DM Un moyen efficace de penser pour faire progresser l'analyse des données est [CRISP-DM (CRoss-Industry Standard Process for Data Mining)](https://mineracaodedados.files.wordpress.com/2012/04/the-crisp-dm-model- the-new-blueprint-for-data-mining-shearer-colin.pdf). Il est divisé en processus suivants.Il s'agit d'une méthodologie d'exploration de données et d'un modèle de processus qui analyse les données tout en faisant tourner le cycle PDCA, de la compréhension des problèmes commerciaux du client à la modélisation réelle, à son évaluation et à son déploiement dans l'entreprise (amélioration de l'activité). ..

  2. Comprendre l'entreprise

  3. Comprendre les données

  4. Préparation des données

  5. Modélisation

  6. Évaluation

  7. Déploiement

Nous avons également travaillé sur ce thème dans cet ordre.

1. Comprendre l'entreprise

Clarifiez les défis commerciaux et définissez des objectifs pour l'analyse des données. Cette fois, le problème à résoudre a déjà été clarifié, c'est donc comme suit.

Objectif: créer et évaluer un modèle de prévision numérique des prix des maisons à Boston

2. Comprendre les données

Vérifiez les données à analyser et décidez si elles peuvent être utilisées telles quelles ou si les données doivent être traitées. Plus précisément, vérifiez s'il y a des données qui ne peuvent pas être utilisées pour l'analyse des données car elles sont dues à de nombreuses données manquantes ou aberrantes, et s'il y a des données qui ne peuvent pas être utilisées, décidez d'une politique de traitement des données telle que la suppression ou l'achèvement.

Lire les données

Importez la bibliothèque que vous souhaitez utiliser et chargez les données pour l'analyse des données.

#Importer la bibliothèque
import numpy as np
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
%matplotlib inline

#Charger le jeu de données
from sklearn import datasets
boston_data = datasets.load_boston()

#Stockage des variables explicatives
boston = pd.DataFrame(boston_data.data, columns=boston_data.feature_names)

#Variable objectif(Prix de la maison)Stockage
boston_medv = pd.DataFrame(boston_data.target)

#Confirmation des données
boston.info()

Les variables de l'ensemble de données sur les prix des logements à Boston qui sont les cibles de cette analyse de données sont les suivantes.

Nom de colonne Contenu
CRIM Taux de criminalité par habitant par ville
ZN 25,Pourcentage de zones résidentielles divisées en parcelles de plus de 000 pieds carrés
INDUS Pourcentage de superficie non commerçante par ville
CHAS Variable fictive Charles River(=1 si au bord d'une rivière, 0 sinon)
NOX Concentration de monoxyde d'azote(1 sur 10 millions)
RM Nombre moyen de chambres par résidence
AGE Pourcentage de logements construits avant 1940
DIS Distance à 5 centres d'emploi de Boston(Pondéré)
RAD Indicateurs d'accessibilité aux autoroutes radiales
TAX 10,Taux d'imposition des immobilisations par 000 $
PTRATIO Etudiants par ville-Ratio enseignant
B 「1000(Bk - 0.63)^Indice de ratio de résidence calculé en "2" * Bk est le ratio d'Afro-Américains par ville
LSTAT Pourcentage de salariés à faible revenu par population
MEDV Prix médian des maisons en unités de 1000 $ * Variable objective

Confirmation des valeurs manquantes

Vérifiez l'ensemble de données sur les prix des maisons à Boston pour les valeurs manquantes.

#Confirmation des valeurs manquantes
boston.isnull().sum()

Résultat de sortie

#Nombre de valeurs manquantes
CRIM       0
ZN         0
INDUS      0
CHAS       0
NOX        0
RM         0
AGE        0
DIS        0
RAD        0
TAX        0
PTRATIO    0
B          0
LSTAT      0
dtype: int64

Il a été confirmé qu'il n'y avait aucune valeur manquante dans ces données.

Confirmation des valeurs aberrantes / anormales

En ce qui concerne les valeurs aberrantes / aberrantes, il est nécessaire de considérer ce qu'il faut traiter comme des valeurs aberrantes / aberrantes en premier lieu. À cette fin, il est nécessaire de comprendre le contexte de l'activité / de l'événement à analyser et le contexte des données telles que la méthode de mesure. Après avoir compris le contexte, évaluez les valeurs aberrantes et les valeurs aberrantes à partir des points de vue suivants, par exemple.

Commencez par vérifier la variation des valeurs à l'aide du diagramme des moustaches.

#Vérifiez la valeur aberrante sur les moustaches de la boîte(Visualisé en tuiles)
fig, axs = plt.subplots(ncols=5, nrows=3, figsize=(13, 8))
for i, col in enumerate(boston.columns):
    sns.boxplot(boston[col], ax=axs[i//5, i%5])
    
#Ajustement de l'intervalle du graphique
fig.subplots_adjust(wspace=0.2, hspace=0.5)

#Supprimer les marges
fig.delaxes(axs[2, 4])
fig.delaxes(axs[2, 3])

Résultat de sortie

01_boxplot.png

Si vous cochez la case diagramme des moustaches, il existe de nombreuses variations dans les valeurs de CRIM, ZN, CHAS, RM, DIS, PTRATIO, B, LSTAT, et il semble qu'il puisse y avoir des valeurs aberrantes. De plus, utilisez l'histogramme pour vérifier les valeurs et la distribution de variables spécifiques.

#Vérifiez la distribution avec l'histogramme(Visualisé en tuiles)
fig, axs = plt.subplots(ncols=5, nrows=3, figsize=(13, 8))
for i, col in enumerate(boston.columns):
    sns.distplot(boston[col], bins=20, kde_kws={'bw':1}, ax=axs[i//5, i%5])

#Ajustement de l'intervalle du graphique
fig.subplots_adjust(wspace=0.2, hspace=0.5)

#Supprimer les marges
fig.delaxes(axs[2, 4])
fig.delaxes(axs[2, 3])

Résultat de sortie

02_distplot.png

Quand j'ai vérifié l'histogramme en imaginant les propriétés des variables, il semble que ce soient des valeurs possibles, donc je ne les traiterai pas comme des valeurs aberrantes ou des valeurs aberrantes ici. "CHAS" a une forme spéciale à la fois dans les moustaches de la boîte et dans l'histogramme, car c'est une variable factice qui indique si elle se trouve le long de la rivière ou non avec 0, 1.

3. Préparation des données

Selon la politique décidée dans «Comprendre les données», les données sont traitées pour pouvoir être intégrées à la modélisation suivante. Par exemple, effectuez le traitement suivant.

Comme confirmé dans «Comprendre les données», passez à la phase suivante en supposant qu'il n'y a pas de valeurs manquantes, de valeurs aberrantes ou de valeurs aberrantes.

4. Modélisation

Modéliser à l'aide d'une méthode adaptée aux conditions d'analyse des données. Sélectionnez les variables à entrer dans le modèle, divisez les données pour l'apprentissage et le test du modèle et utilisez-les pour l'analyse des données. Cette fois, nous sélectionnerons l'analyse de régression linéaire (régression multiple) comme algorithme de modélisation. À propos, dans scikit-learn, l'indice de sélection de l'algorithme et de la méthode de modélisation à utiliser est résumé dans aide-mémoire. ..

Sélection variable

Sélectionnez les variables à mettre dans le modèle. Processus de recherche de combinaisons valides tout en réduisant le nombre de variables réellement utilisées. Il y a les avantages suivants à utiliser moins de variables.

Il existe les méthodes suivantes pour sélectionner les variables.

--Méthode de filtrage: méthode de classement des variables basée sur des indicateurs d'évaluation et de sélection des principales variables.

Cette fois, nous décrirons à titre d'exemple comment vérifier la force de corrélation entre les variables selon la méthode de la méthode de filtrage. Il est pratique d'utiliser pairplot car il visualise l'histogramme de chaque variable et la corrélation de la combinaison des deux variables.

#Quantifier la corrélation des variables quantitatives à l'aide de la carte thermique de Seaborn
boston["MEDV"] = boston_medv
plt.figure(figsize=(11, 11))
sns.heatmap(boston.corr(), cmap="summer", annot=True, fmt='.2f', square=True, linewidths=.5)
plt.ylim(0, boston.corr().shape[0])
plt.show()
#Visualisation graphique de la corrélation des variables quantitatives à l'aide du diagramme de paires Seaborn
sns.pairplot(boston)
plt.show()

Résultat de sortie

03_heatmap.png

04_pairplot.png

Si vous vérifiez la carte thermique, il existe une forte corrélation positive entre RAD et TAX, nous sélectionnons donc ici TAX, qui a une corrélation négative plus forte avec MEDV, parmi les deux variables.

Division des données d'entraînement / de test

Il est courant d'utiliser une partie des données pour l'apprentissage du modèle et le reste pour vérifier la puissance prédictive du modèle créé. Cette fois, nous utiliserons 50% des données pour la formation et 50% pour les tests.

#Variable explicative, variable objective Xm,Stocké dans Ym respectivement
Xm = boston.drop(['MEDV', 'RAD'], axis=1)
Ym = boston.MEDV

#Importez une bibliothèque qui divise les données de train et les données de test
from sklearn.model_selection import train_test_split

# X_train, X_Les données distribuées à tester sont déterminées aléatoirement
# test_size=0.5 à 50%Tester
X_train, X_test = train_test_split(Xm, test_size=0.5, random_state=1234) 
Y_train, Y_test = train_test_split(Ym, test_size=0.5, random_state=1234) 

Montage du modèle

Il donne en fait des données et les intègre dans un modèle de régression linéaire (modèle de régression multiple).

#Importez le modèle de régression linéaire de sklearn et ajustez-le avec les données de train
from sklearn import linear_model
model_lr = linear_model.LinearRegression()
model_lr.fit(X_train, Y_train)

#Utilisez le modèle généré pour obtenir la valeur prédite pour la variable explicative des données de test
predict_lr = model_lr.predict(X_test)

#Coefficient de régression
print(model_lr.coef_)
#Section
print(model_lr.intercept_)

Résultat de sortie

#Coefficient de régression
[-2.79020004e-02  5.37476665e-02 -1.78835462e-01  3.58752530e+00
 -2.01893649e+01  2.15895260e+00  1.95781711e-02 -1.66948371e+00
  6.47894480e-03 -9.66999954e-01  3.62212576e-03 -6.65471265e-01]
#Section
48.68643686655955

5. Évaluation

Évaluez la précision et les performances du modèle créé et jugez si l'objectif peut être atteint. De plus, le modèle est ajusté si nécessaire en fonction des résultats de l'évaluation.

Évaluation du modèle

Dans l'évaluation de la précision du modèle, l'erreur et la force de la corrélation entre la valeur prédite et la valeur de réponse correcte du modèle créé à l'aide des index suivants sont évaluées.

--MAE (Mean Absolute Error): moyenne des valeurs absolues d'erreur --MSE (erreur quadratique moyenne): moyenne de l'erreur quadratique --RMSE (Root Mean Squared Error): racine carrée de MSE --Facteur de décision: carré de la force de corrélation

#Évaluation
# MAE
from sklearn.metrics import mean_absolute_error
mae = mean_absolute_error(Y_test, predict_lr)
print("MAE:{}".format(mae))

# MSE
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(Y_test, predict_lr)
print("MSE:{}".format(mse))

# RMSE
rmse = np.sqrt(mse)
print("RMSE:{}".format(rmse))

#Coefficient de décision
print("R^2:{}".format(model_lr.score(X_test, Y_test)))
#Résultats de l'évaluation
MAE:3.544918694530246
MSE:23.394317851152568
RMSE:4.83676729346705
R^2:0.7279094372333412

Vous avez créé un modèle avec un facteur de décision d'environ 0,73.

6. Déploiement

Appliquez les résultats de l'évaluation de l'analyse des données à votre entreprise pour résoudre les problèmes commerciaux. Cette fois, l'objectif est de créer et d'évaluer un modèle, mais dans les affaires réelles, nous utiliserons le modèle créé pour améliorer les opérations et développer des systèmes.

discussion

Les membres du Lumada Data Science Lab répondront aux questions sincères que les apprentis ont ressenties lorsqu'ils ont réellement expérimenté l'analyse des données.

Je me demandais quoi supprimer comme valeur aberrante, comment devrais-je décider? Je n'ai pas pu le comprendre en regardant les moustaches et l'histogramme.

Le but est d'exclure les enregistrements qui sont des valeurs clairement impossibles ou qui ont des conditions spéciales. Ces données déforment par inadvertance les résultats de la modélisation. Tout d'abord, il est important de bien regarder les données. Comme l'a fait M. Matsushita, tracer des moustaches et des histogrammes est également un moyen courant de se faire remarquer. Par exemple, s'il existe un biais inhabituel dans la valeur d'une variable, vous pouvez facilement le remarquer en le traçant. Aussi, en approfondissant la tendance des enregistrements qui prennent de telles valeurs, vous remarquerez peut-être les phénomènes cachés en arrière-plan et la signification des valeurs.

Combien de coefficients de corrélation jugez-vous que la corrélation entre les variables est forte? Ou pouvez-vous le vérifier d'une autre manière? Je ne suis pas sûr des critères.

Il semble que le coefficient de corrélation soit de 0,7 ou plus et il est généralement considéré que la corrélation est forte, mais en réalité cela dépend du domaine. Par conséquent, il est très important de discuter des critères avec le client. Dans ce cas, nous nous sommes concentrés sur la combinaison de variables explicatives avec un coefficient de corrélation de 0,9 ou plus, mais il est important non seulement de regarder le coefficient de corrélation mais aussi de vérifier la tendance à la variation dans le diagramme de dispersion.

Le coefficient de décision $ R ^ 2 $ est-il calculé par le cross_val_score de la vérification croisée de k fois?

Vous trouverez des informations sur la mise en œuvre de la bibliothèque dans la référence API (https://scikit-learn.org/stable/modules/classes.html), à laquelle vous voudrez peut-être vous référer. L'index de calcul du cross_val_score dans la question est spécifié par l'argument scoring ''. Vous pouvez spécifier le score calculé par nom ou fonction. Si non spécifié, la fonction `` score '' implémentée dans l'algorithme de modélisation est utilisée. LinearRegression implémente $ R ^ 2 $.

Doit-on effectuer une vérification croisée à chaque fois? Y a-t-il un cas où la vérification croisée n'est pas effectuée?

La vérification croisée du facteur k est une méthode, et il est important d'effectuer la vérification en tant que théorie générale. La vérification de l'attente, la vérification de l'intersection de k fois, la vérification de l'intersection de la suppression, etc. sont effectuées selon des conditions telles que la quantité de données et la variation. Le but de la vérification est de détecter le phénomène selon lequel le modèle suradapte les données utilisées pour l'entraînement (surentraînement) et d'améliorer les performances prédictives (généralité) pour les données inconnues. Si vous connaissez le comportement statistique de la population et que la distribution est claire, vous pouvez utiliser toutes les données pour estimer les paramètres de la distribution.

Que faut-il identifier comme facteur principal (la variable explicative qui affecte le plus la variable objective)? Coefficient de régression? Coefficient de corrélation? Il semble y avoir plusieurs façons de le faire, mais je ne sais pas quoi choisir.

Dans le cas d'un modèle de régression multiple, il suffit de comparer les coefficients de régression standardisés afin de considérer la différence de taille et d'unité des variables, en faisant attention à l'indépendance des variables explicatives (il n'y a pas de colinéarité multiple). La colinéarité multiple nécessite une confirmation minutieuse des relations multi-variables, telles que VIF (Dispersion Expansion Factor), une approche qui renvoie en fait une variable avec une autre pour évaluer l'effet, et la régression en composante principale De cette manière, une approche telle que la synthèse préalable de variables non corrélées et ensuite le retour est adoptée.

Je voudrais évoquer la mise en œuvre d'une autre personne qui a décrit l'analyse des données. Y a-t-il un bon moyen?

Il va sans dire que vous parcourez Qiita, mais il existe un site appelé Kaggle qui organise un concours de science des données et Notebook pour divers problèmes, y compris le logement à Boston. (Programme d'analyse des données) est ouvert au public et des discussions sont activement menées. Le simple fait de lire ceci sera une excellente expérience d'apprentissage pour ce que les autres analystes de données utilisent. Vous pouvez également lire le livre d'introduction pour avoir une compréhension de base des statistiques préalables.

Impressions de l'exercice

Puisque sklearn dispose de nombreuses méthodes d'analyse de données, nous avons pu implémenter le modèle plus facilement que nous ne l'avions imaginé. Cependant, même avec les exemples de données préparés comme cette fois, j'ai souvent eu des problèmes avec la politique d'analyse des données, alors j'ai imaginé que plus d'essais et d'erreurs seraient nécessaires pour l'analyse des données dans les affaires réelles. Je crois comprendre un peu qu'on dit que "l'analyse des données nécessite 90% du prétraitement jusqu'à la modélisation". Cette fois, l'accent a été mis sur la maîtrise de la méthode, mais j'espère qu'à travers des exercices, nous pourrons comprendre l'essence de la méthode et faire des propositions basées sur des analyses de données convaincantes pour nos clients.

en conclusion

Cette fois, nous avons demandé à M. Matsushita, un apprenti, de travailler sur l'ensemble de données sur les prix des logements à Boston. Au cours de la discussion, je pense que nous avons pu avoir une discussion significative sur les valeurs aberrantes, les corrélations et les idées sur la vérification. Lumada Data Science Lab. Continuera à publier divers articles de formation pratique, alors attendez-vous au prochain article. Merci d'avoir lu jusqu'ici.

Recommended Posts

SE, débutant en analyse de données, apprend avec l'équipe de science des données vol.1
[Connu de façon inattendue? ] Présentation d'une vraie journée dans le département d'analyse des données
Le premier débutant en programmation à essayer une analyse de données simple avec programmation
[Python] Récupérez les fichiers dans le dossier avec Python
Supprimer des données dans un modèle avec Redis Cluster
Analyse de données en Python: une note sur line_profiler
Environnement enregistré pour l'analyse des données avec Python
Réalisez une maison super IoT en acquérant des données de capteur dans la maison avec Raspberry Pi
Entraînez les données MNIST avec PyTorch en utilisant un réseau neuronal
Analyse de données avec python 2
Analyse de données avec Python
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
Comment représenter la distribution de la composition bactérienne à partir des données d'analyse Qiime2 dans un diagramme de moustaches
Traitement du langage naturel (données originales) avec Word2Vec développé par des chercheurs Google américains
Créez un environnement d'analyse de données avec Kedro + MLflow + Github Actions
Un diagramme de réseau a été créé avec les données du COVID-19.
Ingéniosité pour gérer les données avec Pandas de manière à économiser la mémoire
[Comprendre au plus court] Principes de base de Python pour l'analyse des données
Traitez les fichiers du dossier dans l'ordre avec le script shell
[Homologie] Comptez le nombre de trous dans les données avec Python
Un débutant en Python a d'abord essayé une analyse rapide et facile des données météorologiques des 10 dernières années.
Traitez le contenu du fichier dans l'ordre avec un script shell
Une analyse simple des données de Bitcoin fournie par CoinMetrics en Python
Organisez les données d'achat individuelles dans un tableau avec le MultiLabel Binarizer de scikit-learn
Organiser des blogs utiles dans le domaine de la science des données (outre-mer et Japon)
Lisez le fichier en Python avec un chemin relatif depuis le programme
Résolvez les problèmes de somme partielle avec une recherche complète en Python
Préparez un environnement d'analyse haute vitesse en accédant à mysql depuis l'environnement d'analyse de données
Créer un Ubuntu de démarrage USB avec un environnement Python pour l'analyse des données