Régression linéaire multiple – Sangeet Aggarwal
Une étude complète – Interprétation du modèle → Test d’hypothèse → Sélection des fonctionnalités
La régression linéaire, l’un des modèles les plus populaires et les plus discutés, est certainement la passerelle pour approfondir le Machine Learning (ML). Une telle approche simpliste et directe de la modélisation mérite d’être apprise comme l’une de vos premières étapes dans le ML.
Avant d’aller de l’avant, rappelons que la régression linéaire peut être largement classée en deux catégories.
- Régression linéaire simple: Il s’agit de la forme de régression linéaire la plus simple utilisée lorsqu’il existe une seule variable d’entrée pour la variable de sortie.
Si vous êtes nouveau dans la régression, je vous suggère fortement de lire d’abord sur la régression linéaire simple à partir du lien ci-dessous, où vous comprendrez les mathématiques sous-jacentes et l’approche de ce modèle en utilisant des données intéressantes et un codage pratique.
- La régression linéaire multiple: C’est un formulaire de régression linéaire utilisée lorsqu’il y a deux prédicteurs ou plus.
Nous verrons comment plusieurs variables d’entrée influencent ensemble la variable de sortie, tout en apprenant comment les calculs diffèrent de ceux du modèle Simple LR. Nous allons également construire un modèle de régression en utilisant Python.
Enfin, nous approfondirons la régression linéaire et apprendrons des choses comme la multicolinéarité, les tests d’hypothèse, la sélection de fonctionnalités et bien plus encore.
Maintenant, on peut se demander, nous pourrions également utiliser une régression linéaire simple pour étudier notre sortie par rapport à toutes les variables indépendantes séparément. Cela aurait facilité la vie, non?
Non, ce ne serait pas le cas.
Pourquoi la régression linéaire multiple?
«Pour prédire le résultat de plusieurs variables d’entrée. Duh! ”. Mais c’est ça? Eh bien, retenez cette pensée.
Considérez ceci, supposons que vous deviez estimer le prix d’une certaine maison que vous souhaitez acheter. Vous connaissez la surface au sol, l’âge de la maison, sa distance par rapport à votre lieu de travail, le taux de criminalité de l’endroit, etc.
Maintenant, certains de ces facteurs affecteront positivement le prix de la maison. Par exemple plus la superficie, plus le prix. D’un autre côté, des facteurs comme la distance par rapport au lieu de travail et le taux de criminalité peuvent influencer négativement votre estimation de la maison (à moins que vous ne soyez un riche criminel intéressé par l’apprentissage automatique à la recherche d’une cachette, oui, je ne pense pas).
Inconvénients de la régression linéaire simple → L’exécution de régressions linéaires simples distinctes entraînera des résultats différents lorsque nous ne nous intéresserons qu’à une seule. En plus de cela, il peut y avoir une variable d’entrée qui est elle-même corrélée ou dépendante d’un autre prédicteur. Cela peut entraîner des prévisions erronées et des résultats insatisfaisants.
C’est là que la régression linéaire multiple entre en jeu.
Mathématiquement…
Ici, Oui est la variable de sortie, et X les termes sont les variables d’entrée correspondantes. Notez que cette équation n’est qu’une extension de la régression linéaire simple et que chaque prédicteur a un coefficient de pente correspondant (β).
La première β terme (βo) est la constante d’interception et la valeur de Oui en l’absence de tous les prédicteurs (c’est-à-dire lorsque tous X les termes sont 0). Il peut ou peut ne pas avoir de signification dans un problème de régression donné. Il est généralement là pour donner un coup de pouce pertinent à la ligne / plan de régression.
Voyons maintenant cela à l’aide de certaines données.
Visualiser les données
Nous allons utiliser Données publicitaires qui est disponible sur le site de l’USC Marshall School of Business. Vous pouvez le télécharger ici.
Si vous avez lu mon article sur la régression linéaire simple, vous connaissez déjà ces données. Sinon, permettez-moi de vous donner un bref résumé.
L’ensemble de données publicitaires se compose des ventes d’un produit sur 200 marchés différents, ainsi que des budgets publicitaires pour trois médias différents: la télévision, la radio et les journaux. Voici à quoi ça ressemble:
La première ligne des données indique que les budgets publicitaires pour la télévision, la radio et les journaux étaient respectivement de 230,1 k $, 37,8 k $ et 69,2 k $, et le nombre correspondant d’unités vendues était de 22,1 k (ou 22 100).
Dans Simple Linear Regression, nous pouvons voir comment chaque support publicitaire affecte les ventes lorsqu’il est appliqué sans les deux autres supports. Cependant, dans la pratique, les trois pourraient travailler ensemble pour avoir un impact sur les ventes nettes. Nous n’avons pas pris en compte l’effet combiné de ces médias sur les ventes.
La régression linéaire multiple résout le problème en tenant compte de toutes les variables dans une seule expression. Par conséquent, notre modèle de régression linéaire peut maintenant être exprimé comme suit:
Recherche des valeurs de ces constantes (β) est ce que fait le modèle de régression en minimisant la fonction d’erreur et en ajustant la meilleure ligne ou l’hyperplan (en fonction du nombre de variables d’entrée).
Cela se fait en minimisant la somme résiduelle des carrés (RSS), qui est obtenue en mettant au carré les différences entre les résultats réels et prévus.
Les moindres carrés ordinaires
Parce que cette méthode trouve la moindre somme de carrés, elle est également connue sous le nom de méthode des moindres carrés ordinaires (OLS). En Python, il existe deux façons principales d’implémenter l’algorithme OLS.
- SciKit Learn: Importez simplement le module de régression linéaire à partir du package Sklearn et ajustez le modèle sur les données. Cette méthode est assez simple et vous pouvez voir comment l’utiliser ci-dessous.
from sklearn.linear_model import LinearRegressionmodel = LinearRegression()
model.fit(data.drop('sales', axis=1), data.sales)
- StatsModels: Une autre façon consiste à utiliser le package Statsmodels pour implémenter OLS. Statsmodels est un package Python qui permet d’effectuer divers tests statistiques sur les données. Nous allons l’utiliser ici afin que vous puissiez en apprendre davantage sur cette excellente bibliothèque Python, et parce qu’elle nous sera utile dans les sections ultérieures.
Construire le modèle et interpréter les coefficients
# Importing required libraries
import pandas as pd
import statsmodels.formula.api as sm# Loading data - You can give the complete path to your data here
ad = pd.read_csv("Advertising.csv")# Fitting the OLS on data
model = sm.ols('sales ~ TV + radio + newspaper', ad).fit()
print(model.params)
Vous devriez obtenir la sortie suivante.
Intercept 2.938889
TV 0.045765
radio 0.188530
newspaper -0.001037
Je vous encourage à exécuter également le modèle de régression à l’aide de Scikit Learn et à trouver les paramètres ci-dessus à l’aide de model.coef_ & model.intercept_. Avez-vous vu les mêmes résultats?
Maintenant que nous avons ces valeurs, comment les interpréter? Voici comment:
- Si nous fixons le budget pour la télévision et les journaux, l’augmentation du budget de la radio de 1000 $ entraînera une augmentation des ventes d’environ 189 unités (0,189 * 1000).
- De même, en corrigeant la radio et le journal, nous déduisons une augmentation approximative de 46 unités de produits par augmentation de 1 000 $ du budget de la télévision.
- Cependant, pour le budget des journaux, puisque le coefficient est assez négligeable (proche de zéro), il est évident que le journal n’affecte pas les ventes. En fait, c’est du côté négatif de zéro (-0,001) qui, si l’ampleur était suffisamment grande, aurait pu signifier que cet agent provoquait plutôt la chute des ventes. Mais nous ne pouvons pas faire ce genre d’inférence avec une valeur aussi négligeable.
Permettez-moi de vous dire une chose intéressante ici. Si nous exécutons une régression linéaire simple en utilisant uniquement le budget du journal par rapport aux ventes, nous observerons la valeur du coefficient d’environ 0,055, ce qui est assez significatif par rapport à ce que nous avons vu ci-dessus. Maintenant, pourquoi ça?
Multicolinéarité
Pour comprendre cela, voyons comment ces variables sont corrélées entre elles.
ad.corr()
Visualisons ces chiffres à l’aide d’une carte thermique.
import matplotlib.pyplot as plt
%matplotlib inline> plt.imshow(ad.corr(), cmap=plt.cm.GnBu, interpolation='nearest',data=True)
> plt.colorbar()
> tick_marks = [i for i in range(len(ad.columns))]
> plt.xticks(tick_marks, data.columns, rotation=45)
> plt.yticks(tick_marks, data.columns, rotation=45)
Ici, les carrés sombres représentent une forte corrélation (proche de 1) tandis que les plus clairs représentent la corrélation la plus faible (proche de 0). C’est la raison pour laquelle toutes les diagonales sont bleu foncé, car une variable est entièrement corrélée avec elle-même.
Maintenant, la chose à noter ici est que la corrélation entre le journal et la radio est de 0,35. Cela indique une relation équitable entre les budgets des journaux et ceux de la radio. Par conséquent, on peut déduire que → lorsque le budget radio est augmenté pour un produit, il y a également une tendance à dépenser davantage pour les journaux.
C’est appelé Multicolinéarité et est appelé une situation dans laquelle deux variables d’entrée ou plus sont liées linéairement.
Par conséquent, même si le modèle de régression multiple ne montre aucun impact sur les ventes du journal, le modèle de régression simple le fait toujours en raison de cette multicolinéarité et de l’absence d’autres variables d’entrée.
Ventes et radio → causalité probable
Journaux et radio → multicollinéarité
Ventes et journaux → corrélation transitive
Bien! Nous avons compris la régression linéaire, nous avons construit le modèle et même interprété les résultats. Jusqu’à présent, nous avons appris les principes fondamentaux de la régression linéaire. Cependant, tout en traitant des problèmes du monde réel, nous allons généralement au-delà de ce point pour analyser statistiquement notre modèle et apporter les modifications nécessaires si nécessaire.
Test d’hypothèse pour les prédicteurs
L’une des questions fondamentales auxquelles il faut répondre lors de l’exécution de la régression linéaire multiple est, que ce soit ou non, au moins l’un des prédicteurs est utile pour prédire la sortie.
Nous avons vu que les trois prédicteurs TV, radio et journaux avaient un degré différent de relation linéaire avec les ventes. Mais que se passe-t-il si la relation est due au hasard et qu’il n’y a aucun impact réel sur les ventes en raison de l’un des prédicteurs?
Le modèle ne peut nous donner que des chiffres pour établir une relation linéaire suffisamment étroite entre la variable de réponse et les prédicteurs. Cependant, cela ne peut pas prouver la crédibilité de ces relations.
Pour avoir une certaine confiance, nous prenons l’aide des statistiques et faisons quelque chose Test d’hypothèse. Nous commençons par former un Hypothèse nulle et un correspondant Hypothèse alternative.
Étant donné que notre objectif est de trouver si au moins un prédicteur est utile pour prédire la sortie, nous espérons en quelque sorte qu’au moins l’un des coefficients (pas d’interception) est non nul, pas seulement par hasard, mais en raison de la réalité cause.
Pour ce faire, nous commençons par former une hypothèse nulle: tous les coefficients sont égaux à zéro.
Par conséquent, l’hypothèse alternative serait: au moins un coefficient n’est pas nul. Elle est prouvée en rejetant l’hypothèse nulle en trouvant des preuves statistiques solides.
Le test d’hypothèse est effectué en utilisant F-Statistic. La formule de cette statistique contient la somme résiduelle des carrés (RSS) et la somme totale des carrés (TSS), dont nous n’avons pas à nous soucier car le package Statsmodels s’en charge. Le résumé du modèle OLS que nous adaptons ci-dessus contient le résumé de toutes ces statistiques et peut être obtenu avec cette simple ligne de code:
print(model.summary2())
Si la valeur de la statistique F est égale ou très proche de 1, les résultats sont en faveur de l’hypothèse nulle et nous ne la rejetons pas.
Mais comme nous pouvons voir que la statistique F est de plusieurs fois supérieure à 1, fournissant ainsi des preuves solides contre l’hypothèse nulle (que tous les coefficients sont nuls). Par conséquent, nous rejetons l’hypothèse nulle et sommes convaincus qu’au moins un prédicteur est utile pour prédire la sortie.
Notez que la statistique F ne convient pas lorsque le nombre de prédicteurs (p) est grand, ou si p est supérieur au nombre d’échantillons de données (n).
Par conséquent, nous pouvons dire qu’au moins l’un des trois agents publicitaires est utile pour prédire les ventes.
Mais lequel ou lesquels sont importants? Sont-ils tous importants? Pour le savoir, nous allons effectuer Sélection de fonction ou sélection de variable. Maintenant, une façon de procéder consiste à essayer toutes les combinaisons possibles, c’est-à-dire
- TV uniquement
- Radio uniquement
- Seul journal
- TV & radio
- TV & journal
- radio & journal
- TV, radio et journaux
Ici, il semble toujours possible d’essayer les 7 combinaisons, mais s’il y a plus de prédicteurs, le nombre de combinaisons augmentera de façon exponentielle. Par exemple, en ajoutant un seul prédicteur de plus à notre étude de cas, le nombre total de combinaisons deviendrait 15. Imaginez avoir une douzaine de prédicteurs.
Par conséquent, nous avons besoin de moyens plus efficaces pour effectuer la sélection des fonctionnalités.
Sélection de fonctionnalité
Deux des approches les plus populaires pour sélectionner des fonctionnalités sont:
- Sélection avant: Nous commençons avec un modèle sans aucun prédicteur et juste le terme d’interception. Nous effectuons ensuite une régression linéaire simple pour chaque prédicteur afin de trouver le meilleur interprète (RSS le plus faible). Nous y ajoutons ensuite une autre variable et vérifions à nouveau la meilleure combinaison de 2 variables en calculant le RSS le plus bas (somme résiduelle des carrés). Après cela, la meilleure combinaison de 3 variables est vérifiée, etc. L’approche est arrêtée lorsqu’une règle d’arrêt est satisfaite.
- Sélection en arrière: Nous commençons par toutes les variables du modèle et supprimons la variable la moins significative statistiquement (valeur de p plus élevée: consultez le résumé du modèle ci-dessus pour trouver les valeurs de p des variables). Cette opération est répétée jusqu’à ce qu’une règle d’arrêt soit atteinte. Par exemple, nous pouvons nous arrêter lorsqu’il n’y a plus d’amélioration du score du modèle.
Dans cet article, je vais vous expliquer la méthode de sélection avancée. Pour commencer, voyons comment nous allons sélectionner ou rejeter la variable ajoutée.
Nous allons utiliser 2 mesures pour évaluer notre nouveau modèle après chaque ajout: RSS et R².
Nous connaissons déjà le RSS, qui est la somme résiduelle des carrés et qui est calculé en mettant la différence entre les sorties réelles et les résultats prévus. Il devrait être minimum pour que le modèle fonctionne bien.
R² est la mesure du degré auquel la variance des données est expliquée par le modèle. Mathématiquement, c’est le carré de la corrélation entre les résultats réels et prévus. R² plus proche de 1 indique que le modèle est bon et explique bien la variance des données. Une valeur plus proche de zéro indique un modèle médiocre.
Heureusement, il est calculé pour nous par le module OLS dans Statsmodels. Commençons donc.
# Defining a function to evaluate a model
def evaluateModel(model):
print("RSS = ", ((ad.sales - model.predict())**2).sum())
print("R2 = ", model.rsquared)
Commençons par évaluer les modèles avec des prédicteurs uniques un par un, en commençant par la télévision.
# For TV
model_TV = sm.ols('sales ~ TV', ad).fit()
evaluateModel(model_TV)
RSS = 2102.5305831313512
R ^ 2 = 0,611875050850071
# For radio
model_radio = sm.ols('sales ~ radio', ad).fit()
evaluateModel(model_radio)
RSS = 3618.479549025088
R ^ 2 = 0,33203245544529525
# For newspaper
model_newspaper = sm.ols('sales ~ newspaper', ad).fit()
evaluateModel(model_newspaper)
RSS = 5134.804544111939
R ^ 2 = 0,05212044544430516
On observe que pour model_TV, le RSS est le plus petit et la valeur R² est le plus parmi tous les modèles. Par conséquent, nous sélectionnons model_TV comme modèle de base pour avancer.
Maintenant, nous allons ajouter la radio et le journal un par un et vérifier les nouvelles valeurs.
# For TV & radio
model_TV_radio = sm.ols('sales ~ TV + radio', ad).fit()
evaluateModel(model_TV_radio)
RSS = 556.9139800676184
R ^ 2 = 0,8971942610828957
Comme nous pouvons le voir, nos valeurs se sont considérablement améliorées. RSS a augmenté et R² a encore diminué, par rapport à model_TV. C’est un bon signe. Vérifions maintenant la même chose pour la télévision et les journaux.
# For TV & newspaper
model_TV_radio = sm.ols('sales ~ TV + newspaper', ad).fit()
evaluateModel(model_TV_newspaper)
RSS = 1918,5618118968275
R ^ 2 = 0,6458354938293271
Les valeurs se sont améliorées en ajoutant du journal aussi, mais pas autant qu’avec la radio. Par conséquent, à cette étape, nous allons procéder avec le modèle TV & radio et observer la différence lorsque nous ajouterons du journal à ce modèle.
# For TV, radio & newspaper
model_all = sm.ols('sales ~ TV + radio + newspaper', ad).fit()
evaluateModel(model_all)
RSS = 556.8252629021872
R ^ 2 = 0,8972106381789522
Les valeurs ne se sont pas améliorées de manière significative. Par conséquent, il est impératif de ne pas ajouter de journal et de finaliser le modèle avec la télévision et la radio comme fonctionnalités sélectionnées.
Notre modèle final peut donc être exprimé comme suit:
En traçant les variables TV, radio et ventes dans le graphique 3D, nous pouvons visualiser comment notre modèle a adapté un plan de régression aux données.
C’est tout pour la régression linéaire multiple. J’espère que vous avez passé un bon moment à lire et à apprendre. Pour en savoir plus, restez à l’écoute.