Walmart
file.choose()
## [1] "C:\\Users\\jimen\\Documents\\Ventas market\\Walmartt.Rmd"
stores <- read.csv("C:\\Users\\jimen\\Downloads\\stores.csv")
features <- read.csv("C:\\Users\\jimen\\Downloads\\features.csv")
trains <- read.csv("C:\\Users\\jimen\\Downloads\\train.csv")
test <- read.csv("C:\\Users\\jimen\\Downloads\\test.csv")
#install.packages("dplyr")
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
summary(stores)
## Store Type Size
## Min. : 1 Length:45 Min. : 34875
## 1st Qu.:12 Class :character 1st Qu.: 70713
## Median :23 Mode :character Median :126512
## Mean :23 Mean :130288
## 3rd Qu.:34 3rd Qu.:202307
## Max. :45 Max. :219622
count(stores, Type, sort = TRUE)
## Type n
## 1 A 22
## 2 B 17
## 3 C 6
str(stores)
## 'data.frame': 45 obs. of 3 variables:
## $ Store: int 1 2 3 4 5 6 7 8 9 10 ...
## $ Type : chr "A" "A" "B" "A" ...
## $ Size : int 151315 202307 37392 205863 34875 202505 70713 155078 125833 126512 ...
summary(features)
## Store Date Fuel_Price MarkDown1
## Min. : 1 Length:8190 Min. :2.472 Min. : -2781
## 1st Qu.:12 Class :character 1st Qu.:3.041 1st Qu.: 1578
## Median :23 Mode :character Median :3.513 Median : 4744
## Mean :23 Mean :3.406 Mean : 7032
## 3rd Qu.:34 3rd Qu.:3.743 3rd Qu.: 8923
## Max. :45 Max. :4.468 Max. :103185
## NA's :4158
## MarkDown2 MarkDown3 MarkDown4 MarkDown5
## Min. : -265.76 Min. : -179.26 Min. : 0.22 Min. : -185.2
## 1st Qu.: 68.88 1st Qu.: 6.60 1st Qu.: 304.69 1st Qu.: 1440.8
## Median : 364.57 Median : 36.26 Median : 1176.42 Median : 2727.1
## Mean : 3384.18 Mean : 1760.10 Mean : 3292.94 Mean : 4132.2
## 3rd Qu.: 2153.35 3rd Qu.: 163.15 3rd Qu.: 3310.01 3rd Qu.: 4832.6
## Max. :104519.54 Max. :149483.31 Max. :67474.85 Max. :771448.1
## NA's :5269 NA's :4577 NA's :4726 NA's :4140
## CPI Unemployment IsHoliday
## Min. :126.1 Min. : 3.684 Mode :logical
## 1st Qu.:132.4 1st Qu.: 6.634 FALSE:7605
## Median :182.8 Median : 7.806 TRUE :585
## Mean :172.5 Mean : 7.827
## 3rd Qu.:213.9 3rd Qu.: 8.567
## Max. :229.0 Max. :14.313
## NA's :585 NA's :585
str(features)
## 'data.frame': 8190 obs. of 11 variables:
## $ Store : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Date : chr "05/02/2010" "12/02/2010" "19/02/2010" "26/02/2010" ...
## $ Fuel_Price : num 2.57 2.55 2.51 2.56 2.62 ...
## $ MarkDown1 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown2 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown3 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown4 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown5 : num NA NA NA NA NA NA NA NA NA NA ...
## $ CPI : num 211 211 211 211 211 ...
## $ Unemployment: num 8.11 8.11 8.11 8.11 8.11 ...
## $ IsHoliday : logi FALSE TRUE FALSE FALSE FALSE FALSE ...
View(features)
Paso 1 Definir el area del negocio que buscamos impactar o mejorar su
KPI
Paso 2 El departamento de mercadotecnia de las 45 tiendas muestra las 45
tiendas en el indicador de ventas semanales
Vision, segmentacion, personalizacion, contextualizacion
Paso 3 Generar ideas o conceptos especificos
Elaborar un modelos predictivo de ventas semanales
Paso 4 reunir los datos requeridos
Elaborar una base de datos con la variable dependiente (ventas
semanales) y las variables independientes
Paso 5 Plan de ejecucion
Fase 1: Piloto(San Antonio Tx)
Fase 2: Texas
Fase 3: EUA
Sistemas asegurara la captura del Markdown en las bases de datos
bd <- merge(trains, stores, by= "Store")
bd1 <- bd
bd1 <- merge(bd1, features)
bd2 <- bd1
str(bd2)
## 'data.frame': 421570 obs. of 15 variables:
## $ Store : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Date : chr "01/04/2011" "01/04/2011" "01/04/2011" "01/04/2011" ...
## $ IsHoliday : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ Dept : int 49 26 81 34 59 30 7 85 8 28 ...
## $ Weekly_Sales: num 13168 5947 28545 9950 317 ...
## $ Type : chr "A" "A" "A" "A" ...
## $ Size : int 151315 151315 151315 151315 151315 151315 151315 151315 151315 151315 ...
## $ Fuel_Price : num 3.52 3.52 3.52 3.52 3.52 ...
## $ MarkDown1 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown2 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown3 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown4 : num NA NA NA NA NA NA NA NA NA NA ...
## $ MarkDown5 : num NA NA NA NA NA NA NA NA NA NA ...
## $ CPI : num 215 215 215 215 215 ...
## $ Unemployment: num 7.68 7.68 7.68 7.68 7.68 ...
bd2 <- subset(bd2, select = -c(MarkDown1, MarkDown2, MarkDown3, MarkDown4, MarkDown5))
summary(bd2)
## Store Date IsHoliday Dept
## Min. : 1.0 Length:421570 Mode :logical Min. : 1.00
## 1st Qu.:11.0 Class :character FALSE:391909 1st Qu.:18.00
## Median :22.0 Mode :character TRUE :29661 Median :37.00
## Mean :22.2 Mean :44.26
## 3rd Qu.:33.0 3rd Qu.:74.00
## Max. :45.0 Max. :99.00
## Weekly_Sales Type Size Fuel_Price
## Min. : -4989 Length:421570 Min. : 34875 Min. :2.472
## 1st Qu.: 2080 Class :character 1st Qu.: 93638 1st Qu.:2.933
## Median : 7612 Mode :character Median :140167 Median :3.452
## Mean : 15981 Mean :136728 Mean :3.361
## 3rd Qu.: 20206 3rd Qu.:202505 3rd Qu.:3.738
## Max. :693099 Max. :219622 Max. :4.468
## CPI Unemployment
## Min. :126.1 Min. : 3.879
## 1st Qu.:132.0 1st Qu.: 6.891
## Median :182.3 Median : 7.866
## Mean :171.2 Mean : 7.960
## 3rd Qu.:212.4 3rd Qu.: 8.572
## Max. :227.2 Max. :14.313
bd2$Date <- as.Date(bd2$Date, format = "%d/%m/%Y")
str(bd2)
## 'data.frame': 421570 obs. of 10 variables:
## $ Store : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Date : Date, format: "2011-04-01" "2011-04-01" ...
## $ IsHoliday : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ Dept : int 49 26 81 34 59 30 7 85 8 28 ...
## $ Weekly_Sales: num 13168 5947 28545 9950 317 ...
## $ Type : chr "A" "A" "A" "A" ...
## $ Size : int 151315 151315 151315 151315 151315 151315 151315 151315 151315 151315 ...
## $ Fuel_Price : num 3.52 3.52 3.52 3.52 3.52 ...
## $ CPI : num 215 215 215 215 215 ...
## $ Unemployment: num 7.68 7.68 7.68 7.68 7.68 ...
#install.packages("Matrix")
library(Matrix)
#install.packages("wordspace")
library(wordspace)
signcount(bd2$Weekly_Sales)
## pos zero neg
## 420212 73 1285
bd3 <- bd2
bd3 <- bd3[bd3$Weekly_Sales > 0, ]
summary(bd3)
## Store Date IsHoliday Dept
## Min. : 1.0 Min. :2010-02-05 Mode :logical Min. : 1.00
## 1st Qu.:11.0 1st Qu.:2010-10-08 FALSE:390652 1st Qu.:18.00
## Median :22.0 Median :2011-06-17 TRUE :29560 Median :37.00
## Mean :22.2 Mean :2011-06-18 Mean :44.24
## 3rd Qu.:33.0 3rd Qu.:2012-02-24 3rd Qu.:74.00
## Max. :45.0 Max. :2012-10-26 Max. :99.00
## Weekly_Sales Type Size Fuel_Price
## Min. : 0 Length:420212 Min. : 34875 Min. :2.472
## 1st Qu.: 2120 Class :character 1st Qu.: 93638 1st Qu.:2.933
## Median : 7662 Mode :character Median :140167 Median :3.452
## Mean : 16033 Mean :136750 Mean :3.361
## 3rd Qu.: 20271 3rd Qu.:202505 3rd Qu.:3.738
## Max. :693099 Max. :219622 Max. :4.468
## CPI Unemployment
## Min. :126.1 Min. : 3.879
## 1st Qu.:132.0 1st Qu.: 6.891
## Median :182.4 Median : 7.866
## Mean :171.2 Mean : 7.960
## 3rd Qu.:212.4 3rd Qu.: 8.567
## Max. :227.2 Max. :14.313
bd4 <- bd3
bd4$week_number <- strftime(bd4$Date, format = "%V")
str(bd4)
## 'data.frame': 420212 obs. of 11 variables:
## $ Store : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Date : Date, format: "2011-04-01" "2011-04-01" ...
## $ IsHoliday : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ Dept : int 49 26 81 34 59 30 7 85 8 28 ...
## $ Weekly_Sales: num 13168 5947 28545 9950 317 ...
## $ Type : chr "A" "A" "A" "A" ...
## $ Size : int 151315 151315 151315 151315 151315 151315 151315 151315 151315 151315 ...
## $ Fuel_Price : num 3.52 3.52 3.52 3.52 3.52 ...
## $ CPI : num 215 215 215 215 215 ...
## $ Unemployment: num 7.68 7.68 7.68 7.68 7.68 ...
## $ week_number : chr "13" "13" "13" "13" ...
bd4$week_number <- as.integer(bd4$week_number)
str(bd4)
## 'data.frame': 420212 obs. of 11 variables:
## $ Store : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Date : Date, format: "2011-04-01" "2011-04-01" ...
## $ IsHoliday : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ Dept : int 49 26 81 34 59 30 7 85 8 28 ...
## $ Weekly_Sales: num 13168 5947 28545 9950 317 ...
## $ Type : chr "A" "A" "A" "A" ...
## $ Size : int 151315 151315 151315 151315 151315 151315 151315 151315 151315 151315 ...
## $ Fuel_Price : num 3.52 3.52 3.52 3.52 3.52 ...
## $ CPI : num 215 215 215 215 215 ...
## $ Unemployment: num 7.68 7.68 7.68 7.68 7.68 ...
## $ week_number : int 13 13 13 13 13 13 13 13 13 13 ...
summary(bd4)
## Store Date IsHoliday Dept
## Min. : 1.0 Min. :2010-02-05 Mode :logical Min. : 1.00
## 1st Qu.:11.0 1st Qu.:2010-10-08 FALSE:390652 1st Qu.:18.00
## Median :22.0 Median :2011-06-17 TRUE :29560 Median :37.00
## Mean :22.2 Mean :2011-06-18 Mean :44.24
## 3rd Qu.:33.0 3rd Qu.:2012-02-24 3rd Qu.:74.00
## Max. :45.0 Max. :2012-10-26 Max. :99.00
## Weekly_Sales Type Size Fuel_Price
## Min. : 0 Length:420212 Min. : 34875 Min. :2.472
## 1st Qu.: 2120 Class :character 1st Qu.: 93638 1st Qu.:2.933
## Median : 7662 Mode :character Median :140167 Median :3.452
## Mean : 16033 Mean :136750 Mean :3.361
## 3rd Qu.: 20271 3rd Qu.:202505 3rd Qu.:3.738
## Max. :693099 Max. :219622 Max. :4.468
## CPI Unemployment week_number
## Min. :126.1 Min. : 3.879 Min. : 1.00
## 1st Qu.:132.0 1st Qu.: 6.891 1st Qu.:14.00
## Median :182.4 Median : 7.866 Median :26.00
## Mean :171.2 Mean : 7.960 Mean :25.83
## 3rd Qu.:212.4 3rd Qu.: 8.567 3rd Qu.:38.00
## Max. :227.2 Max. :14.313 Max. :52.00
bd5 <- bd4
bd5 <- bd5 %>%
dplyr::mutate(year = lubridate::year(Date),
month = lubridate::month(Date),
day = lubridate::day(Date))
regresion <- lm(Weekly_Sales ~ Store + Dept + IsHoliday + Type + Size + Fuel_Price + CPI + Unemployment + week_number + year + month + day, data=bd5)
summary(regresion)
##
## Call:
## lm(formula = Weekly_Sales ~ Store + Dept + IsHoliday + Type +
## Size + Fuel_Price + CPI + Unemployment + week_number + year +
## month + day, data = bd5)
##
## Residuals:
## Min 1Q Median 3Q Max
## -34197 -12897 -5854 5629 671564
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.001e+06 2.932e+05 3.413 0.000642 ***
## Store -1.434e+02 3.059e+00 -46.869 < 2e-16 ***
## Dept 1.108e+02 1.097e+00 101.013 < 2e-16 ***
## IsHolidayTRUE 8.239e+02 1.382e+02 5.961 2.51e-09 ***
## TypeB -3.346e+02 1.071e+02 -3.126 0.001775 **
## TypeC 5.851e+03 1.838e+02 31.827 < 2e-16 ***
## Size 9.909e-02 9.561e-04 103.637 < 2e-16 ***
## Fuel_Price 4.829e+02 1.480e+02 3.263 0.001101 **
## CPI -2.306e+01 9.808e-01 -23.516 < 2e-16 ***
## Unemployment -2.467e+02 2.021e+01 -12.207 < 2e-16 ***
## week_number 5.533e+02 4.395e+02 1.259 0.208131
## year -4.946e+02 1.452e+02 -3.407 0.000656 ***
## month -2.229e+03 1.913e+03 -1.165 0.243950
## day -9.725e+01 6.292e+01 -1.545 0.122239
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21690 on 420198 degrees of freedom
## Multiple R-squared: 0.08981, Adjusted R-squared: 0.08978
## F-statistic: 3189 on 13 and 420198 DF, p-value: < 2.2e-16
datos_nuevos <- data.frame(Store=1, IsHoliday= TRUE, Dept=1, Type="A", Size= 151315, week_number =1, Temperature = 59.17, Fuel_Price = 3.524, CPI= 214.8372, Unemployment = 7.682, year =2012, month = 1, day=1)
predict(regresion,datos_nuevos)
## 1
## 14492.64
plot(bd5$week_number,bd5$Weekly_Sales, main="Numero de semana donde se vende mas", xlab="week_number", ylab="Weekly_Sales")
plot(bd5$Dept,bd5$Weekly_Sales, main="Departamento donde se vende mas", xlab="Dept", ylab="Weekly_Sales")
plot(bd5$Store,bd5$Weekly_Sales, main="Tienda donde se vende mas", xlab="Store", ylab="Weekly_Sales")
Despues de haber realizado tres graficas donde veiamos cual seria el departamento, la tienda y la semana donde se vende mas se llega a la conclusion que es la tienda numero 10, las ultimas semanas del año y el departamento numero 72.
Por lo tanto la propuesta sin mayor analisis que me gustaria dar seria enfocarnos en esa tienda a final de año y en ese departamento en especifico ya sea haciendo ofertas como 2 x 1 para duplicar la ya gran existente venta.
Por otro lado tambien podriamos ver los puntos mas bajos de estas graficas para ver de que manera podriamos implementar tacticas para atraer a mas consumidores a ellas.
A lo largo de este trabajo estuvimos analizando el comportamiento de
las ventas de Walmart en casos especificos y esto primeramente
comenzando por buscar las areas donde quisieramos lograr un mayor
impacto alrededor de todo Estados Unidos con las 45 tiendas con las que
cuenta. Para enfocarnos de poco a poco, dividimos el proceso en 3 fases
y enfocandonos mayormente en Texas para el proceso Piloto.
Los puntos claves de este analisis se pueden enlistar como la creacion
de la base de datos consolidada; donde usamos la funcion de (merge) para
crear una sola base de datos donde se encontrara todo lo necesario para
mejorar el manejo de los datos, y la realizacion de una regresion lineal
para predecir el comportamiento de estas ventas a partir de los datos
con los que ya contabamos.