# Loader la data
import pandas as pd
import statsmodels.formula.api as smf
df = pd.read_csv('advertising.csv')
df
# Description de la data
df.describe()
import matplotlib.pyplot as plt
%matplotlib inline
fig, ax = plt.subplots(1,1)
df['Radio'].hist(bins = 100)
plt.title('Radio')
plt.show()
# La distribution des variables (Histogrammes)
df.hist(bins = 100)
plt.show()
# Détection des outliers (Boxplots)
df.boxplot()
# Détecter les excates outliers
import numpy as np
np.percentile(df.Newspaper, 99.5)
# Supprimer les outliers
condition = df['Newspaper'] < 100
df[condition].shape
df = df[condition]
# Vérification:
df.boxplot()
# Corrélation
import seaborn as sns
corr = df.corr()
fig, ax = plt.subplots(1,1, figsize = (9,9))
sns.heatmap(corr,
xticklabels=corr.columns.values,
yticklabels=corr.columns.values)
# Scatterplot de chaque couple de variables
for i in range (-1,3):
figure = plt.figure()
plt.scatter(df.iloc[:,i], df.iloc[:,i+1])
plt.xlabel('{}'.format(df.columns[i]))
plt.ylabel('{}'.format(df.columns[i+1]))
for i in range (-1,1):
figure = plt.figure()
plt.scatter(df.iloc[:,i], df.iloc[:,i+2])
plt.xlabel('{}'.format(df.columns[i]))
plt.ylabel('{}'.format(df.columns[i+2]))
# Part 2:
# Linear Regression pour les 3 variables:
lm = smf.ols(formula='Sales ~ Radio ', data=df).fit()
lm.summary()
lm.pvalues
lm_2 = smf.ols(formula='Sales ~ TV ', data=df).fit()
lm_2.summary()
lm_3 = smf.ols(formula='Sales ~ Newspaper ', data=df).fit()
lm_3.summary()
# Le coefficient de la regression Sales ~ Radio est plus grand que le coefficient de la regression Sales ~ TV
# alors que TV est plus corrélé à Sales que Radio, ceci revient au fait que les 2 variables TV et Radio ne sont pas
# normées de la même façon !
# calcul de la MSE
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(df.Sales, lm.fittedvalues)
mse
mse_2 = mean_squared_error(df.Sales, lm_2.fittedvalues)
mse_2
mse_3 = mean_squared_error(df.Sales, lm_3.fittedvalues)
mse_3
df.describe()
# Normalisation des variables:
# modifier les données pour que le coefficient de la regression linéaire
# reflete l'importance de la variable par rapport aux autres.
df['TV'] = df['TV']/df.TV.max()
df['Radio'] = df['Radio']/df.Radio.max()
df['Newspaper'] = df['Newspaper']/df.Newspaper.max()
df
lm = smf.ols(formula='Sales ~ Radio ', data=df).fit()
lm.summary()
lm_2 = smf.ols(formula='Sales ~ TV ', data=df).fit()
lm_2.summary()
lm_3 = smf.ols(formula='Sales ~ Newspaper ', data=df).fit()
lm_3.summary()
# Dans le modèle Sales~TV, l'intercept représente le gain même sans dépenser de l'argent à la publicité télévisée.
# modele multi variables
lm_4 = smf.ols(formula='Sales ~ Radio + TV + Newspaper', data=df).fit()
lm_4.summary()
# Si on augmente de 50 les sommes allouées au média TV, les ventes augmentent de 50 fois le coef de TV dans le modèle.
# Le coef de la variable Newspaper est presuqe nul vu que cette dernière n'est pas une variable significative.
# Le coef de la variable Newspaper est devenue négatif, parce qu'elle diminue les ventes quand elle est incluse dans
# le même modèle avec TV et Radio
# Le modèle sans Newspaper:
lm_5 = smf.ols(formula='Sales ~ Radio + TV', data=df).fit()
lm_5.summary()
mse_4 = mean_squared_error(df.Sales, lm_4.fittedvalues)
mse_5 = mean_squared_error(df.Sales, lm_5.fittedvalues)
print(mse_4)
print(mse_5)
# Même si on a enlevé la variable Newspaper le modèle ne s'améliore pas, il est pratiquement le même.
# Part 4:
# Ajouter la nouvelle variable tv_radio:
df['TV_Radio'] = df.TV * df.Radio
df
# Rajoutez au modèle la variable multiplicative:
lm_6 = smf.ols(formula='Sales ~ Radio + TV + TV_Radio', data=df).fit()
lm_6.summary()
# On peut expliquer que cette variable ait une grande influence sur le modèle par le fait d'investir sur les deux à la fois
# et en même temps est mieux qu'investir sur l'un des deux ou les deux séparément.
# C'est à dire si la personne voit la publication à la fois à la télé et au radio, ceci augmente les chances de ventes.