Table of Content

Voici comment j'ai utilisé Python pour créer un modèle de régression à l'aide d'un ensemble de données de commerce électronique

https://ift.tt/2PUtYFJ

Le langage de programmation Python gagne en popularité parmi les SEO pour sa facilité d'utilisation pour automatiser les tâches quotidiennes et routinières. Il peut gagner du temps et générer un apprentissage automatique sophistiqué pour résoudre des problèmes plus importants qui peuvent aider votre marque et votre carrière. En plus des automatisations, cet article aidera ceux qui veulent en savoir plus sur la science des données et comment Python peut aider.

Dans l'exemple suivant, j'utilise un ensemble de données de commerce électronique pour créer un modèle de régression. J'explique également comment déterminer si le modèle révèle quelque chose de statistiquement significatif et comment les valeurs aberrantes peuvent fausser ses résultats.

J'utilise des blocs-notes Python 3 et Jupyter pour générer des graphiques et des équations avec régression linéaire dans Données Kaggle J'ai vérifié les corrélations et construit un modèle d'apprentissage automatique de base avec cet ensemble de données. Avec cette configuration, j'ai maintenant une équation pour prédire ma variable cible.

Avant de construire mon modèle, je veux prendre du recul pour proposer une définition facile à comprendre de la régression linéaire et pourquoi l'analyse des données est vitale. [19659005] Qu'est-ce que la régression linéaire?

La régression linéaire est un algorithme d'apprentissage automatique de base qui est utilisé pour prédire une variable en fonction de sa relation linéaire entre d'autres variables indépendantes. Regardons un simple graphique de régression linéaire:

Si vous connaissez l'équation ici, vous pouvez également connaître les valeurs de y par rapport aux valeurs de x. & # 39; & # 39; à & # 39; & # 39; est le coefficient de & # 39; & # 39; x & # 39; & # 39; ainsi que la pente de la ligne, & # 39; & # 39; b & # 39; & # 39; est d'intercepter, ce qui signifie que lorsque x = 0, b = y.

Mon ensemble de données de commerce électronique

J'ai utilisé cet ensemble de données de Kaggle . Il n'est pas très compliqué ni détaillé, mais il suffit d'étudier le concept de régression linéaire.

Si vous êtes nouveau et n'avez pas utilisé Jupyter Notebook auparavant, voici un petit conseil:

  • Démarrez le terminal et tapez cette commande: jupyter notebook

Une fois entrée, cette commande démarrera automatiquement votre navigateur Web par défaut avec un nouveau bloc-notes. Cliquez sur Nouveau et Python 3.

Il est maintenant temps d'utiliser des codes Python sophistiqués.

montant matplotlib.pyplot en tant que plt
montant numpy en tant que np
montant pandas en tant que pd
à partir de sklearn.linear_model import LinearRegression
à partir de sklearn.model_selection import train_test_split [194590atststs
importez statsmodels.api sous forme de sm
à partir de statsmodels.tools.eval_measures importez mse, rmse [mnss19]
pd.options.display.float_format = & # 39; {: .5f} & # 39;. Format
import warnings
import maths
import scipy.stats as stats
import scipy
from sklearn.preprocessing import scale
warnings.filterwarnings (& # 39; ignore & # 39 ;)

df = pd.read_csv ("Ecom_Customers.csv")
df.head ()

Ma variable cible sera Montant annuel dépensé et j'essaierai de trouver sa relation entre Autres variables Ce serait formidable si je pouvais dire que les utilisateurs dépenseront autant, par exemple, si Le temps dans l'application augmente d'une minute de plus. C'est le principal objectif de l'étude.

  • Analyse des données exploratoires

Commençons par vérifier la carte thermique de corrélation:

df_kor = df.corr ()
plt.figure (figsize = (10,10) )
sns.heatmap (df_kor, vmin = -1, vmax = 1, cmap = "viridis", annot = True, largeur de ligne = 0,1)

Cette carte thermique montre les corrélations entre chaque variable donnant un poids de – 1 à +1.

Les violets signifient une corrélation négative, les jaunes signifient une corrélation positive et approchant 1 ou -1 signifie que vous avez quelque chose d'important là-bas, analysez-le. Par exemple:

  • La durée de l'adhésion a une corrélation positive et élevée avec Montant annuel dépensé. (81%)
  • Temps d'application a également une corrélation mais pas puissante comme Durée de l'adhésion. (50%)

Examinons ces relations en détail. Mon intrigue préférée est sns.pairplot . Une seule ligne de code et vous verrez toutes les distributions.

sns.pairplot (df)

Ce graphique montre toutes les distributions entre chaque variable, dessine tous les graphiques pour vous. Pour comprendre les données qu'ils contiennent, vérifiez les noms des axes gauche et inférieur. (S'ils sont identiques, vous verrez un simple graphique à barres de distribution).

Regardez les graphiques de dernière ligne, Montant annuel dépensé (ma cible sur l'axe de gauche) par rapport à d'autres variables. [19659002] La durée de l'adhésion a une linéarité vraiment parfaite, il est tellement évident que si je peux fidéliser les clients, ils dépenseront plus! Mais combien? Y a-t-il un nombre ou un coefficient pour le spécifier? Pouvons-nous le prévoir? Nous allons le résoudre.

Avant de construire un modèle, vous devez vérifier la présence de cellules vides dans votre ensemble de données. Il n'est pas possible de continuer avec ces valeurs NaN car de nombreux algorithmes d'apprentissage automatique ne prennent pas en charge les données avec eux.

Voici mon code pour voir les valeurs manquantes:

df.isnull (). Sum ()

isnull () détecte les valeurs de NaN et sum () les compte.

Je n'ai pas de valeurs NaN, ce qui est bien. Si je l'avais fait, j'aurais dû les remplir ou les retirer.

Par exemple, pour éliminer toutes les valeurs de NaN, utilisez ceci:

df.dropna (inplace = True)

Pour terminer, vous pouvez utiliser fillna ():

] df ["Time on App"] .fillna (df ["Time on App"] .mean (), inplace = True)

Ma suggestion ici est de lire cet excellent article sur la façon de gérer les valeurs perdues dans leur ensemble des données. C'est un autre problème à résoudre et vous avez besoin d'approches différentes si vous les avez.

Création d'un modèle de régression linéaire

Jusqu'à présent, j'ai exploré en détail l'ensemble de données et je me suis familiarisé avec celui-ci. Il est maintenant temps de créer le modèle et de voir si je peux prédire Montant annuel dépensé.

Définissons X et Y. Je vais d'abord ajouter toutes les autres variables à X et analyser les résultats plus tard. [19659002] Y = df ["Yearly Amount Spent"]

X = df [[ “Length of Membership”, “Time on App”, “Time on Website”, ‘Avg. Session Length’]]

Ensuite, je diviserai mon ensemble de données en données de formation et de test, ce qui signifie que je sélectionnerai au hasard 20% des données et les séparerai du données d'entraînement (test_size affiche le pourcentage des données de test – 20%) (Si vous ne spécifiez pas random_state dans votre code, chaque fois que vous exécutez (exécutez) votre code, une nouvelle valeur aléatoire est générée et les ensembles de données d'entraînement et de test auraient des valeurs différentes à chaque fois.)

X_train, X_test, y_train, y_test = train_test_split (X, Y, test_size = 0.2, random_state = 465)

print (& # 39; Training Data Nombre: {} & # 39;. Format (X_train.shape [0]))
print (& # 39; Test data count: {} & # 39;. Format (X_test.shape [0]) )

Maintenant, construisons le modèle: [19659002] X_train = sm.add_constant (X_train)
results = sm.OLS (y_train, X_train) .fit ()
results.summary ()

Compréhension des résultats du modèle: est-ce statistiquement significatif

Alors, que signifient vraiment tous ces chiffres?

Avant de continuer, il vaudra mieux expliquer ces termes statistiques de base ici car je déciderai si mon modèle est suffisant ou non en regardant ces chiffres.

La valeur P ou la valeur de probabilité montre une signification statistique. Supposons que vous ayez l'hypothèse que le CTR moyen de vos mots clés de marque est de 70% ou plus et que sa valeur p est de 0,02. Cela signifie qu'il y a 2% de chances que vous voyiez les CTR de vos mots clés de marque en dessous de % 70. Est-ce statistiquement significatif? Généralement, 0,05 est utilisé pour la limite maximale (niveau de confiance de 95%), donc s'il a une valeur p inférieure à 0,05, oui! C'est important. Plus la valeur de p est petite, meilleurs sont ses résultats!

Voyons maintenant le tableau récapitulatif. Mes 4 variables ont des valeurs de p qui montrent leurs relations, qu'elles soient significatives ou insignifiantes avec Montant annuel dépensé . Comme vous pouvez le voir, L'heure sur le site Web est statistiquement insignifiante avec elle car sa valeur de p est de 0,180. Par conséquent, il vaudra mieux le laisser tomber.

  • Qu'est-ce que R au carré et R au carré?

R au carré est une métrique simple mais puissante qui montre à quel point la variance est expliquée par le modèle. Comptez toutes les variables que vous avez définies dans X et donnez un pourcentage d'explication. C'est quelque chose comme les capacités de votre modèle.

Ajusté R au carré est également similaire au R au carré mais ne compte que les variables statistiquement significatives. C'est pourquoi il est préférable de regarder en permanence le carré R ajusté.

Dans mon modèle, 98,4% de la variance peut être expliquée, ce qui est vraiment élevé.

Ce sont des coefficients des variables qui nous donnent l'équation du modèle.

Alors c'est fini? Non! J'ai Temps sur le site Web variable dans mon modèle qui est statistiquement non significative.

Maintenant, je vais construire un autre modèle et publier L'heure sur le site Web variable:

X2 = df [["Length of Membership", "Time on App", 'Avg. Session Length']]
X2_train, X2_test, y2_train, y2_test = train_test_split (X2, Et, test_size = 0,2, random_state = 465)

print (& # 39; Training data count: & # 39;, X2_train.shape [0])
print (& # 39; Counting data test :: & # 39;, X2_test.shape [0]) [19659063] X2_train = sm.add_constant (X2_train)

results2 = sm.OLS (y2_train, X2_train) .fit ()
results2.summary ( )

R au carré est toujours bon et je n'ai pas de variable dont la valeur p est supérieure à 0,05.

Regardons le tableau des modèles ici:

X2_test = sm.add_constant (X2_test)

and2_preds = results2.predict (X2_test)

plt.figure (dpi = 75)
plt .scatter (y2_test, y2_preds)
plt.plot (y2_test, y2_test, color = "red")
plt.xlabel ("Scores réels", fontdict = ex_font)
plt.ylabel ("Scores estimés ", fontdict = ex_font)
plt.title (" Modèle: Scores réels vs estimés ", fontdict = header_font)
plt.show ()

Il semble que je prédise de très bonnes valeurs! Les scores et prévisions réels ont une linéarité presque parfaite.

Enfin, je vais vérifier les erreurs.

Lors de la construction de modèles, les comparer et décider lequel est le meilleur est une étape cruciale. Vous devriez essayer beaucoup de choses, puis analyser les résumés. Supprimez certaines variables, ajoutez-les ou multipliez-les et réessayez. Après avoir terminé la série d'analyses, vous vérifierez les valeurs de p, les erreurs et R au carré. Le meilleur modèle aura:

  • Valeurs P inférieures à 0,05
  • Erreurs mineures
  • R au carré le plus élevé

Examinons maintenant les erreurs:

print ("Erreur absolue moyenne (MAE): {} ". Format (mean_absolute_error (y2_test, y2_preds)))
print (" Erreur dans le carré du milieu (MSE): {} ". Format (mse (y2_test, y2_preds)))
print (" Erreur racine moyenne quadratique (RMSE): {} ". Format (rmse (y2_test, y2_preds)))
print (" Mean quadratic error (RMSE): {} ". Format (rmse (y2_test, y2_preds))))
print ("Erreur absolue moyenne de perc. (MAPE): {}". Format (np.mean (np.abs ((y2_test - y2_preds) / y2_test)) * 100))

Si vous voulez savoir ce que MSE, RMSE ou MAPE est, vous pouvez lire cet article .

Ce sont tous des calculs d'erreurs différents et maintenant, nous allons nous concentrer sur les plus petits lorsque nous comparons différents modèles.

Ensuite, afin de comparer mon modèle avec un autre, je vais créer un autre modèle qui comprend Durée de l'adhésion et Durée d'application uniquement .

X3 = df [['Length of Membership', 'Time on App']]
Y = df ['Yearly Amount Spent']
X3_train, X3_test, y3_train, y3_test = train_test_split (X3, Y, test_size = 0,2, random_state = 465) [196590X3_train=smadd_constant(X3_train)

results3 = sm.OLS (y3_train, X3_train) .19 (1945] results3.summary ()

X3_test = sm.add_constant (X3_test)
y3_preds = results3.predict (X3_test)

plt.figure (dpi = 75)
plt.scatter (y3_test, y3_preds)
plt.plot (y3_test, y3_test, color = "red")
plt.xlabel (" Scores réels ", fontdict = eksen_font)
plt.ylabel (" Scores estimés ", fontdict = eksen_font)
plt.title (" Modèle des scores réels par rapport aux scores estimés ", fontdict = baslik_font)
plt. show ()

print ("Erreur absolue moyenne (MAE)
: {}". Format (mean_absolute_error (y3_test, y3_preds)))
print ("Mean square error (MSE): {}". format (mse (y3_test), y3_preds)))
print ("Root Mean Squared Error (RMSE):
{}". format (rmse (y3_test, y3_preds))) print ("Mean Absolute Perc. Error (MAPE):
{}". Format (np.mean (np.abs ((y3_test - y3_preds) / y3_test)) * 100 ))

Lequel est le meilleur?

Comme vous pouvez le constater, les erreurs du dernier modèle sont plus élevées que le premier. Le R a également été ajusté au carré ajusté. Si les erreurs étaient plus petites, alors nous dirions que cette dernière est meilleure, quel que soit le R au carré. Enfin, nous choisissons des erreurs plus petites et R au carré le plus élevé. Je viens d'ajouter cette seconde pour vous montrer comment comparer les modèles et décider lequel est le meilleur.

Notre modèle est maintenant le suivant:

Montant annuel dépensé = -1027,28 + 61,49x (durée de l'adhésion) + 38,76x (durée de la demande) + 25,48x (moyenne de durée de la session)

Cela signifie, par exemple, si nous pouvons augmenter la durée de l'adhésion d'un an de plus et garder toutes les autres fonctionnalités fixes, une personne dépensera 61,49 $ de plus!

Conseils avancés: valeurs aberrantes et non-linéarité

En ce qui concerne les données réelles, les choses ne sont généralement pas si faciles. Pour trouver une linéarité ou des modèles plus précis, vous devrez peut-être faire autre chose. Par exemple, si votre modèle n'est pas suffisamment précis, recherchez les valeurs aberrantes. Parfois, les valeurs aberrantes peuvent confondre vos résultats!

Source: http://r-statistics.co/Outlier-Treatment-With-R.html

En dehors de cela, parfois vous obtiendrez des lignes courbes au lieu de linéaires, mais vous verrez qu'il y a aussi un relation entre les variables!

Vous devriez alors penser à transformer vos variables à l'aide de logarithmes ou de carrés.

Voici une astuce pour décider lequel utiliser:

Source: https://courses.lumenlearning.com/boundless-algebra/chapter/graphs-of-exponential-and-logarithmic-functions/ [19659094] Par exemple, dans le troisième graphique, s'il a une ligne semblable au vert, vous devriez envisager d'utiliser des logarithmes pour le rendre linéaire!

Il y a beaucoup de choses à faire, donc les essayer est vraiment important.

Conclusion

Si vous aimez jouer avec les nombres et faire progresser vos compétences en science des données, découvrez Python. Ce n'est pas un langage de programmation très difficile à apprendre, et les statistiques que vous pouvez générer avec lui peuvent faire une grande différence dans votre travail quotidien.

Google Analytics, Google Ads, Search Console ... L'utilisation de ces outils offre déjà des tonnes de données, et si vous connaissez précisément les concepts de gestion des données, vous obtiendrez des informations très précieuses de leur part. Vous pouvez créer des prévisions de trafic plus précises ou analyser des données Analytics, telles que le taux de rebond, le temps passé sur la page et ses relations avec le taux de conversion. À la fin de la journée, il pourrait être possible de prédire l'avenir de votre marque. Mais ce ne sont là que quelques exemples.

Si vous voulez aller plus loin dans la régression linéaire, voir mon

modèle OLS Google Page Speed ​​Insights . J'ai construit mon propre ensemble de données et essayé de prédire le calcul en fonction de mesures de vitesse, telles que FCP (première peinture avec contenu), FMP (première peinture avec signification) et TTI (temps d'interaction).

À la fin, combinez vos données, essayez de trouver des corrélations et de prédire votre objectif. Hamlet Batista a un excellent article sur le mélange des données pratiques . Je le recommande fortement avant de construire un modèle de régression.


Les opinions exprimées dans cet article sont celles de l'auteur invité et pas nécessairement de Search Engine Land. Les auteurs du personnel sont répertoriés ici .


À propos de l'auteur

Hülya Çoban est analyste en référencement chez ZEO Agency spécialisée dans le référencement technique et le marketing basé sur les données. Elle croit que les projets réussis tirent leur force des données, elle essaie donc toujours de lire l'histoire derrière les chiffres. Suivez-la sur Twitter pour le référencement technique, Python et la science des données.

Source link



source http://www.usadailynews.us/?p=1388

Post a Comment