En el siguiente ejemplo vamos a trabajar con los datos de las ventas de una compañía para relacionar las ventas con la inversión en mercadeo.
require(ggplot2)
require(plotly)
require(datarium)
data("marketing")
head(marketing)
| youtube | newspaper | sales | |
|---|---|---|---|
| 276.12 | 45.36 | 83.04 | 26.52 |
| 53.40 | 47.16 | 54.12 | 12.48 |
| 20.64 | 55.08 | 83.16 | 11.16 |
| 181.80 | 49.56 | 70.20 | 22.20 |
| 216.96 | 12.96 | 70.08 | 15.48 |
| 10.44 | 58.68 | 90.00 | 8.64 |
## Exploración de las ventas (sales)
promedio=mean(marketing$sales) #promedio / media
desviación=sd(marketing$sales) #desviación estandar
data.frame(promedio,desviación)
| promedio | desviación |
|---|---|
| 16.827 | 6.260948 |
g1=ggplot(data = marketing,mapping = aes(x=sales))+geom_histogram(fill="blue")+theme_bw()
ggplotly(g1)
Se observa que las ventas promedio del histórico de datos son de 16 millones de dolares con una desviación estandar de 6 millones, indicando que las ventas en general varían de manera significativa y suponemos que esas variaciones pueden estar relacionadas con la inversión en mercadeo y por ello el siguiente paso es un análisis exploratorio bivariado.
##Exploración Bivariada - (Relacicones entre ventas con mercadeo)
g2=ggplot(data=marketing,mapping = aes(x=newspaper, y=sales))+geom_point()+theme_bw()+geom_smooth()
ggplotly(g2)
cor(marketing$newspaper,marketing$sales)
## [1] 0.228299
Se puede observar que no se evidencia una relación entre la veriable inversión en mercadeo por medio de periodico y las ventas, con un coeficiente de correlación de 0.22 (muy bajo)
##Exploración Bivariada - (Relacicones entre ventas con mercadeo)
g3=ggplot(data=marketing,mapping = aes(x=facebook, y=sales))+geom_point()+theme_bw()+geom_smooth()
ggplotly(g3)
cor(marketing$facebook,marketing$sales)
## [1] 0.5762226
Se observa por otro lado una relación directa entre la inversión en publicidad en facebook y las ventas. Esta relación tiene una fuerza media ya que el coeficiente de correlación es de casi 0,6.
##Exploración Bivariada - (Relacicones entre ventas con mercadeo)
g4=ggplot(data=marketing,mapping = aes(x=youtube, y=sales))+geom_point()+theme_bw()+geom_smooth()
ggplotly(g4)
cor(marketing$youtube,marketing$sales)
## [1] 0.7822244
Se observa que la relación entre la inversión en mercadeo en Youtube y las ventas es fuerte, con un coeficiente de correlación de aproximadamente 0,8; es decir que tiene mucha mas relevancia en la explicación en las ventas que facebook y periodico.
A continuación vamos a estumar un modelo de regresión lineal simple entre las ventas en función de la inversión en mercadeo en Youtube
##Estimación del Modelo
mod_you=lm(sales~youtube, data = marketing)
mod_you
##
## Call:
## lm(formula = sales ~ youtube, data = marketing)
##
## Coefficients:
## (Intercept) youtube
## 8.43911 0.04754
#sales=8.4391 + (0.04754*youtube)
El modelo estimado es igual a \(sales = 8.43911 + +(0.04754*youtube)\) en donde \(\beta_0 = 8.43911\) y \(\beta_1 = 0.04754\). Podemos interpretar lo siguiente que las ventas promedio esperadas cuando no se invierte en youtube son de 8.43911 millones de dolares y por cada 1000 dolares adicionales de inversión en mercadeo en youtube se espera un retorno en ventas de 0.04754 millones de dolares.
##Interpretación del summary del modelo
summary(mod_you)
##
## Call:
## lm(formula = sales ~ youtube, data = marketing)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10.0632 -2.3454 -0.2295 2.4805 8.6548
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 8.439112 0.549412 15.36 <2e-16 ***
## youtube 0.047537 0.002691 17.67 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.91 on 198 degrees of freedom
## Multiple R-squared: 0.6119, Adjusted R-squared: 0.6099
## F-statistic: 312.1 on 1 and 198 DF, p-value: < 2.2e-16
Se observa en la tabla del summary del modelo que youtube es significativo en el modelo porque el valor p lo indica con un nivel de confianza del 99.9% (***), adicionalmente este modelo logra explicar el 61.19% de la variabilidad de las ventas (en general de las ventas)
##Predecir con el modelo
#Estimar las ventas para un mes en el cual se invierta en mercadeo en youtube 65 mil dolares.
predict(mod_you,list(youtube=65),interval = "confidence",level = 0.95)
## fit lwr upr
## 1 11.52899 10.72462 12.33337
El promedio esperado de ventas para una eventual inversión en youtube de 65 mil dorales sería de 11.528 millones de dolares. El intervalo de confianza para la predicción de las ventas nos indica que el promedio de ventas estaría entre los 10.72 y 12.33 millones de dolares con un 95% de confianza.
A continuación vamos a realizar una validación cruzada para evaluar el poder predictivo del modelo. Usaremos un escenario 80-20 (modelar-validar) como se observa:
##Paso 1 - Segmentar los Datos
id_modelar=sample(1:200,size = 160)
marketing_modelar=marketing[id_modelar,]
marketing_validar=marketing[-id_modelar,]
##Paso 2 - Estimar el Modelo
mod_you_modelar=lm(sales~youtube,data = marketing_modelar)
mod_you_modelar
##
## Call:
## lm(formula = sales ~ youtube, data = marketing_modelar)
##
## Coefficients:
## (Intercept) youtube
## 8.49731 0.04728
##Paso 3 - Predecir Set de Validación
sales_pred=predict(mod_you_modelar,list(youtube=marketing_validar$youtube))
## Paso 4 - Comparar Ventas del Modelo y Reales
sales_real=marketing_validar$sales
error=sales_real - sales_pred
res=data.frame(sales_real,sales_pred,error)
res
| sales_real | sales_pred | error |
|---|---|---|
| 15.48 | 18.755922 | -3.2759221 |
| 14.16 | 11.759869 | 2.4001310 |
| 12.72 | 19.833984 | -7.1139838 |
| 10.32 | 12.247834 | -1.9278338 |
| 15.00 | 12.344292 | 2.6557081 |
| 15.00 | 21.967411 | -6.9674112 |
| 18.60 | 21.451076 | -2.8510764 |
| 18.00 | 16.605473 | 1.3945273 |
| 19.08 | 22.120609 | -3.0406094 |
| 12.60 | 12.503164 | 0.0968358 |
| 30.48 | 23.641244 | 6.8387562 |
| 12.12 | 10.942812 | 1.1771883 |
| 19.92 | 19.987182 | -0.0671820 |
| 20.52 | 18.540310 | 1.9796903 |
| 15.48 | 20.236838 | -4.7568384 |
| 27.84 | 22.109261 | 5.7307386 |
| 17.76 | 21.388662 | -3.6286623 |
| 11.64 | 12.293226 | -0.6532258 |
| 25.44 | 18.858054 | 6.5819457 |
| 29.04 | 23.323499 | 5.7165007 |
| 16.80 | 14.324521 | 2.4754789 |
| 26.76 | 20.798565 | 5.9614347 |
| 14.88 | 14.727376 | 0.1526243 |
| 14.76 | 22.103587 | -7.3435874 |
| 18.24 | 19.459499 | -1.2194992 |
| 14.40 | 12.826583 | 1.5734173 |
| 15.48 | 13.507464 | 1.9725362 |
| 26.64 | 22.733402 | 3.9065976 |
| 17.64 | 19.158777 | -1.5187767 |
| 16.92 | 18.466548 | -1.5465476 |
| 7.92 | 9.598072 | -1.6780716 |
| 23.64 | 21.519164 | 2.1208355 |
| 13.08 | 12.662036 | 0.4179636 |
| 12.48 | 14.432327 | -1.9523272 |
| 3.84 | 8.729948 | -4.8899482 |
| 21.60 | 17.774318 | 3.8256815 |
| 14.64 | 20.895024 | -6.2550235 |
| 10.44 | 11.686107 | -1.2461069 |
| 8.04 | 9.558354 | -1.5183535 |
| 20.76 | 16.991305 | 3.7686947 |
##Paso 5 - Calcular Indicador de Evaluación de la Predicción
MAE=mean(abs(error)) #Mean Absolut Error (Error Medio Absoluto)
MAE
## [1] 3.104957
MAE=array(NA,500)
for(i in 1:500){
##Paso 1 - Segmentar los Datos
id_modelar=sample(1:200,size = 160)
marketing_modelar=marketing[id_modelar,]
marketing_validar=marketing[-id_modelar,]
##Paso 2 - Estimar el Modelo Set de Modelar
mod_you_modelar=lm(sales~youtube,data=marketing_modelar)
##Paso 3 - Predeccir Set de Validación
sales_pred=predict(mod_you_modelar,list(youtube=marketing_validar$youtube))
##Paso 4 - Comparar Ventas del Modelo y Reales
sales_real=marketing_validar$sales
error=sales_real-sales_pred
res=data.frame(sales_real,sales_pred,error)
##Paso 5 - Calcular Indicador de Evaluación de la Predicción
MAE[i]=mean(abs(error)) #Mean Absolut Error (Error Medio Absoluto)
}
hist(MAE,col="gray",main="MAE para diferentes escenarios")
3/mean(marketing$sales)*100
## [1] 17.82849
La validación cruzada en un primer paso segmentamos los datos dejando 80% para el modelo y 20% aleatorios para validar. Luego se ajusta el modelo con el 80%. Posteriormente predecimos las ventas del 20% y finalmente se comparan los resultados del modelo contra los reales por medio de la metrica MAE que en este caso nos da alrededor de 3 millones de dolares como error de predicción (pronostico de ventas)