Datos de ventas de muestra, información de pedidos, ventas, clientes, envíos, etc., utilizados para segmentación, análisis de clientes, agrupación en clústeres y más.
Datos de ventas de muestra
Datos de ventas de muestra, información de pedidos, ventas, clientes, envíos, etc., utilizados para segmentación, análisis de clientes, agrupación en clústeres y más. Inspirado para el análisis minorista. Este conjunto de datos de muestra es solo un punto de partida. Los minoristas pueden recopilar datos adicionales para realizar análisis más específicos y obtener insights más profundos.
El objetivo principal del estudio es realizar análisis predictivos y descriptivos del mercado minorista utilizando el conjunto de datos de ventas de muestra. Específicamente, se busca: Comprender el comportamiento del cliente: Analizar las tendencias de compra, la frecuencia de compra, el valor promedio de compra y otros patrones de comportamiento. Segmentar el mercado: Dividir el mercado en grupos específicos (por edad, sexo, ubicación, etc.) para comprender mejor sus necesidades y preferencias. Identificar oportunidades de negocio: Evaluar la rentabilidad de diferentes productos, categorías y canales de venta para identificar oportunidades de crecimiento. Optimizar la estrategia de marketing: Desarrollar campañas de marketing más personalizadas y efectivas en función de la segmentación del mercado y el análisis del comportamiento del cliente. Pronosticar la demanda: Predecir la demanda de productos para optimizar la gestión del inventario y la planificación de la producción.
La población de estudio está compuesta por todos los clientes que han realizado compras en el período de tiempo cubierto por el conjunto de datos.
No se ha especificado si el conjunto de datos proporcionado representa una muestra o la población completa de clientes. Es importante verificar esta información para determinar la representatividad de los datos y la validez de las inferencias que se puedan realizar.
La unidad de análisis es cada transacción individual de compra realizada por un cliente. El conjunto de datos proporciona información específica para cada compra, como fecha, ID del cliente, ID del producto, precio, cantidad, método de pago, etc.
banco <- read.csv("sales_data_sample.csv",
sep = ",", stringsAsFactors = TRUE)
head(banco)
library(agricolae)
tabla_frecuencia_ORDERNUMBER <- table.freq(hist(banco$ORDERNUMBER, breaks = "sturges", plot = FALSE))
tabla_frecuencia_ORDERNUMBER
library(agricolae)
tabla_frecuencia_QUANTITYORDERED <- table.freq(hist(banco$QUANTITYORDERED, breaks = "sturges", plot = FALSE))
tabla_frecuencia_QUANTITYORDERED
library(agricolae)
tabla_frecuencia_PRICEEACH <- table.freq(hist(banco$PRICEEACH, breaks = "sturges", plot = FALSE))
tabla_frecuencia_PRICEEACH
library(agricolae)
tabla_frecuencia_ORDERLINENUMBER <- table.freq(hist(banco$ORDERLINENUMBER, breaks = "sturges", plot = FALSE))
tabla_frecuencia_ORDERLINENUMBER
library(agricolae)
tabla_frecuencia_SALES <- table.freq(hist(banco$SALES, breaks = "sturges", plot = FALSE))
tabla_frecuencia_SALES
library(agricolae)
tabla_frecuencia_QTR_ID <- table.freq(hist(banco$QTR_ID, breaks = "sturges", plot = FALSE))
tabla_frecuencia_QTR_ID
library(agricolae)
tabla_frecuencia_MONTH_ID <- table.freq(hist(banco$MONTH_ID, breaks = "sturges", plot = FALSE))
tabla_frecuencia_MONTH_ID
library(agricolae)
tabla_frecuencia_MSRP <- table.freq(hist(banco$MSRP, breaks = "sturges", plot = FALSE))
tabla_frecuencia_MSRP
library(ggplot2)
ggplot(data=banco, aes(x=ORDERNUMBER))+
geom_bar()
library(ggplot2)
ggplot(data = banco, aes(x = ORDERNUMBER, y = QUANTITYORDERED)) +
geom_point() +
labs(x = "Numero de orden", y = "Cantidad de orden")
library(ggplot2)
ggplot(data=banco, aes(y=PRODUCTLINE))+
geom_bar()+
theme_classic()
ggplot(data=banco, aes(STATE))+
geom_bar()+
theme_classic()
ggplot(data=banco, aes(COUNTRY))+
geom_bar()+
theme_classic()
ggplot(data=banco, aes(TERRITORY))+
geom_bar()+
theme_classic()
ggplot(data=banco, aes(DEALSIZE, fill = DEALSIZE))+
geom_bar()+
coord_polar("x", start=0)
head(banco)
#QUANTITYORDERED
Media
QUANTITYORDERED <- banco$QUANTITYORDERED
promedio = sum(QUANTITYORDERED)/length(QUANTITYORDERED)
promedio
## [1] 89.25
Mediana
median(QUANTITYORDERED)
## [1] 22
Moda
library(modeest)
##
## Attaching package: 'modeest'
## The following object is masked from 'package:agricolae':
##
## skewness
mfv(QUANTITYORDERED)
## [1] 21
#PRICEEACH
Media
PRICEEACH <- banco$PRICEEACH
promedio = sum(PRICEEACH)/length(PRICEEACH)
promedio
## [1] 93.99375
Mediana
median(PRICEEACH)
## [1] 100
Moda
library(modeest)
mfv(PRICEEACH)
## [1] 100
#SALES Media
SALES <- banco$SALES
promedio = sum(SALES)/length(SALES)
promedio
## [1] 355020.8
Mediana
median(SALES)
## [1] 378055
Moda
library(modeest)
mfv(SALES)
## [1] 1451 2871 27659 37467 73311 73741 109935 216854 233312 243456
## [11] 249777 259739 318864 320712 347976 367676 388434 396566 409968 417735
## [21] 435804 439438 439614 470844 486024 520527 540462 551232 720911 732906
## [31] 751608 773793
(cuartiles)
quantile(banco$SALES)
## 0% 25% 50% 75% 100%
## 1451.0 229197.5 378055.0 474639.0 773793.0
Segun los resultados: El valor minimo de una venta es: 733.110
### Cuartil 1 \((Q_1)\) interpretación: es $ 2844.725; El 25% de las ventas, su monto máximo es $ 2844.725
### Cuartil 2 \((Q_2)\) interpretación: es $ 4032.670; El 50% de las ventas, su monto máximo es $ 4032.670
### Cuartil 3 \((Q_3)\) interpretación: es $ 5255.108; El 75% de las ventas, su monto máximo es $ 5255.108
Dividir en 10 grupo (deciles)
quantile(banco$SALES, probs = seq(0, 1, 0.1))
## 0% 10% 20% 30% 40% 50% 60% 70%
## 1451.0 41051.4 131318.8 245352.3 319603.2 378055.0 414628.2 439561.2
## 80% 90% 100%
## 513626.4 703943.1 773793.0
Dividir en 100 grupo (percentiles)
quantile(banco$SALES, probs = seq(0, 1, 0.01))
## 0% 1% 2% 3% 4% 5% 6% 7%
## 1451.00 1891.20 2331.40 2771.60 8820.12 16504.40 24188.68 29326.36
## 8% 9% 10% 11% 12% 13% 14% 15%
## 32366.84 35407.32 41051.40 52163.04 63274.68 73323.90 73457.20 73590.50
## 16% 17% 18% 19% 20% 21% 22% 23%
## 73723.80 83513.38 94733.52 105953.66 131318.80 164463.69 197608.58 218993.54
## 24% 25% 26% 27% 28% 29% 30% 31%
## 224095.52 229197.50 233920.64 237065.28 240209.92 243354.56 245352.30 247311.81
## 32% 33% 34% 35% 36% 37% 38% 39%
## 249271.32 252068.26 255156.48 258244.70 269199.00 287527.75 305856.50 319030.32
## 40% 41% 42% 43% 44% 45% 46% 47%
## 319603.20 320176.08 321257.28 329709.12 338160.96 346612.80 353098.00 359205.00
## 48% 49% 50% 51% 52% 53% 54% 55%
## 365312.00 371620.02 378055.00 384489.98 389409.84 391930.76 394451.68 397236.10
## 56% 57% 58% 59% 60% 61% 62% 63%
## 401390.72 405545.34 409699.96 412220.43 414628.20 417035.97 421710.18 427311.57
## 64% 65% 66% 67% 68% 69% 70% 71%
## 432912.96 436349.10 437475.64 438602.18 439452.08 439506.64 439561.20 439926.30
## 72% 73% 74% 75% 76% 77% 78% 79%
## 449607.60 459288.90 468970.20 474639.00 479344.80 484050.60 492234.54 502930.47
## 80% 81% 82% 83% 84% 85% 86% 87%
## 513626.40 522719.85 528899.70 535079.55 540892.80 544231.50 547570.20 550908.90
## 88% 89% 90% 91% 92% 93% 94% 95%
## 598742.12 651342.61 703943.10 723429.95 727148.40 730866.85 735524.28 741321.90
## 96% 97% 98% 99% 100%
## 747119.52 753160.95 760038.30 766915.65 773793.00
Asimetría y curtosis
Asimetría
library(fBasics)
##
## Attaching package: 'fBasics'
## The following objects are masked from 'package:modeest':
##
## ghMode, ghtMode, gldMode, hypMode, nigMode, skewness
## The following objects are masked from 'package:agricolae':
##
## kurtosis, skewness
skewness(banco$SALES)
## [1] 0.1186137
## attr(,"method")
## [1] "moment"
Resultado: [1] 0.9536708
hist(banco$SALES)
Curtosis
kurtosis(banco$SALES)
## [1] -0.8081525
## attr(,"method")
## [1] "excess"
# Cargar conjunto de datos
bancoTwo<-read.csv("sales_data_sample.csv",
sep = "," , stringsAsFactors = TRUE)
# Mostrar
head(bancoTwo)
str(bancoTwo)
## 'data.frame': 32 obs. of 25 variables:
## $ ORDERNUMBER : int 10107 10121 10134 10145 10159 10168 10180 10188 10201 10211 ...
## $ QUANTITYORDERED : int 20 24 21 35 19 26 19 18 12 2100 ...
## $ PRICEEACH : num 95.7 81.3 94.7 83.3 100 ...
## $ ORDERLINENUMBER : int 3 5 2 6 10 7 9 1 2 14 ...
## $ SALES : int 2871 27659 388434 37467 520527 347976 249777 551232 216854 470844 ...
## $ ORDERDATE : Factor w/ 32 levels "1/15/2004 0:00",..: 15 24 26 29 3 6 7 9 12 1 ...
## $ STATUS : Factor w/ 2 levels "Disputed","Shipped": 2 2 2 2 2 2 2 2 2 1 ...
## $ QTR_ID : int 1 2 3 3 4 4 4 4 4 1 ...
## $ MONTH_ID : int 2 5 7 8 10 10 11 11 12 1 ...
## $ YEAR_ID : int 2003 2003 2003 2003 2003 2003 2003 2003 2003 2004 ...
## $ PRODUCTLINE : Factor w/ 2 levels "Classic Cars",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ MSRP : int 95 95 95 95 95 95 95 95 95 95 ...
## $ PRODUCTCODE : Factor w/ 2 levels "S10_1678","S10_1949": 1 1 1 1 1 1 1 1 1 1 ...
## $ CUSTOMERNAME : Factor w/ 28 levels "Australian Collectors, Co.",..: 15 19 16 25 5 22 7 13 18 2 ...
## $ PHONE : Factor w/ 28 levels "(1) 47.55.6555",..: 16 19 5 23 24 26 12 6 25 1 ...
## $ ADDRESSLINE1 : Factor w/ 28 levels "1785 First Street",..: 17 9 6 16 15 18 2 24 8 3 ...
## $ ADDRESSLINE2 : Factor w/ 5 levels "","Level 3","Level 6",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ CITY : Factor w/ 23 levels "Allentown","Bergen",..: 16 19 17 18 21 4 8 2 21 17 ...
## $ STATE : Factor w/ 9 levels "","CA","CT","MA",..: 7 1 1 2 2 2 1 1 2 1 ...
## $ POSTALCODE : Factor w/ 25 levels "","10022","2067",..: 2 12 17 19 1 21 14 23 1 16 ...
## $ COUNTRY : Factor w/ 10 levels "Australia","Austria",..: 10 4 4 10 10 10 4 5 10 4 ...
## $ TERRITORY : Factor w/ 3 levels "APAC","EMEA",..: NA 2 2 NA NA NA 2 2 NA 2 ...
## $ CONTACTLASTNAME : Factor w/ 25 levels "Benitez","Berglund",..: 25 10 5 24 4 12 22 19 17 20 ...
## $ CONTACTFIRSTNAME: Factor w/ 25 levels "Adrian","Christina",..: 13 21 3 11 11 12 18 23 11 5 ...
## $ DEALSIZE : Factor w/ 3 levels "Large","Medium",..: 3 3 2 2 2 2 3 2 3 2 ...
Verificación de valores perdidos
# Verificar columnas con missing
which(colSums(is.na(bancoTwo))!= 0)
## TERRITORY
## 22
Realizar el análisis utilizando librerias
library(VIM)
library(mice)
resumen_missing <- aggr(bancoTwo, numbers=T)
summary(resumen_missing)
##
## Missings per variable:
## Variable Count
## ORDERNUMBER 0
## QUANTITYORDERED 0
## PRICEEACH 0
## ORDERLINENUMBER 0
## SALES 0
## ORDERDATE 0
## STATUS 0
## QTR_ID 0
## MONTH_ID 0
## YEAR_ID 0
## PRODUCTLINE 0
## MSRP 0
## PRODUCTCODE 0
## CUSTOMERNAME 0
## PHONE 0
## ADDRESSLINE1 0
## ADDRESSLINE2 0
## CITY 0
## STATE 0
## POSTALCODE 0
## COUNTRY 0
## TERRITORY 14
## CONTACTLASTNAME 0
## CONTACTFIRSTNAME 0
## DEALSIZE 0
##
## Missings in combinations of variables:
## Combinations Count Percent
## 0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 18 56.25
## 0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:1:0:0:0 14 43.75
Para determinar mejor lo patrones de comportamiento de missing se puede utilizar la siguiente función
library(VIM)
matrixplot(bancoTwo)
otra representación
#Con librería mice
library(mice)
md.pattern(bancoTwo, rotate.names = TRUE)
## ORDERNUMBER QUANTITYORDERED PRICEEACH ORDERLINENUMBER SALES ORDERDATE STATUS
## 18 1 1 1 1 1 1 1
## 14 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0
## QTR_ID MONTH_ID YEAR_ID PRODUCTLINE MSRP PRODUCTCODE CUSTOMERNAME PHONE
## 18 1 1 1 1 1 1 1 1
## 14 1 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0 0
## ADDRESSLINE1 ADDRESSLINE2 CITY STATE POSTALCODE COUNTRY CONTACTLASTNAME
## 18 1 1 1 1 1 1 1
## 14 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0
## CONTACTFIRSTNAME DEALSIZE TERRITORY
## 18 1 1 1 0
## 14 1 1 0 1
## 0 0 14 14
La librería visdat permite visualizar missing pero los ordena por tipo de datos
library(visdat)
vis_dat(bancoTwo)
Para obtener columnas con porcentajes de missing
vis_miss(bancoTwo)
Corrección de missing
Eliminar filas o columnas con missin (es recomendable optar por eliminar columnas si el % de missing esta por arriba de 15% <para ralgunos expertos 30%>)
banco_corregido1 <- na.omit(bancoTwo)
str(banco_corregido1)
## 'data.frame': 18 obs. of 25 variables:
## $ ORDERNUMBER : int 10121 10134 10180 10188 10211 10223 10275 10299 10309 10341 ...
## $ QUANTITYORDERED : int 24 21 19 18 2100 79 25 23 31 21 ...
## $ PRICEEACH : num 81.3 94.7 86.1 100 100 ...
## $ ORDERLINENUMBER : int 5 2 9 1 14 9 1 9 5 9 ...
## $ SALES : int 27659 388434 249777 551232 470844 396566 417735 259739 439438 773793 ...
## $ ORDERDATE : Factor w/ 32 levels "1/15/2004 0:00",..: 24 26 7 9 1 14 27 32 4 11 ...
## $ STATUS : Factor w/ 2 levels "Disputed","Shipped": 2 2 2 2 1 1 1 1 1 2 ...
## $ QTR_ID : int 2 3 4 4 1 1 3 3 4 4 ...
## $ MONTH_ID : int 5 7 11 11 1 2 7 9 10 11 ...
## $ YEAR_ID : int 2003 2003 2003 2003 2004 2004 2004 2004 2004 2004 ...
## $ PRODUCTLINE : Factor w/ 2 levels "Classic Cars",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ MSRP : int 95 95 95 95 95 95 95 95 95 95 ...
## $ PRODUCTCODE : Factor w/ 2 levels "S10_1678","S10_1949": 1 1 1 1 1 1 1 1 1 1 ...
## $ CUSTOMERNAME : Factor w/ 28 levels "Australian Collectors, Co.",..: 19 16 7 13 2 1 14 24 3 20 ...
## $ PHONE : Factor w/ 28 levels "(1) 47.55.6555",..: 19 5 12 6 1 9 20 28 10 27 ...
## $ ADDRESSLINE1 : Factor w/ 28 levels "1785 First Street",..: 9 6 2 24 3 11 12 27 25 26 ...
## $ ADDRESSLINE2 : Factor w/ 5 levels "","Level 3","Level 6",..: 1 1 1 1 1 2 1 1 1 1 ...
## $ CITY : Factor w/ 23 levels "Allentown","Bergen",..: 19 17 8 2 17 12 13 7 23 20 ...
## $ STATE : Factor w/ 9 levels "","CA","CT","MA",..: 1 1 1 1 1 9 1 1 1 1 ...
## $ POSTALCODE : Factor w/ 25 levels "","10022","2067",..: 12 17 14 23 16 7 9 4 8 10 ...
## $ COUNTRY : Factor w/ 10 levels "Australia","Austria",..: 4 4 4 5 4 1 4 3 5 2 ...
## $ TERRITORY : Factor w/ 3 levels "APAC","EMEA",..: 2 2 2 2 2 1 2 2 2 2 ...
## $ CONTACTLASTNAME : Factor w/ 25 levels "Benitez","Berglund",..: 10 5 22 19 20 7 16 14 3 21 ...
## $ CONTACTFIRSTNAME: Factor w/ 25 levels "Adrian","Christina",..: 21 3 18 23 5 22 9 19 10 8 ...
## $ DEALSIZE : Factor w/ 3 levels "Large","Medium",..: 3 2 3 2 2 2 2 3 2 1 ...
## - attr(*, "na.action")= 'omit' Named int [1:14] 1 4 5 6 9 12 13 14 16 19 ...
## ..- attr(*, "names")= chr [1:14] "1" "4" "5" "6" ...
# Verificar columnas con missing
which(colSums(is.na(banco_corregido1))!= 0)
## named integer(0)
Aplicando técnicas de imputación Imputación por medidas de tendencia central
library(DMwR2)
banco_corregido2<-centralImputation(bancoTwo) #DMwR, mediana (númerico), moda(no númerico)
str(banco_corregido2)
## 'data.frame': 32 obs. of 25 variables:
## $ ORDERNUMBER : int 10107 10121 10134 10145 10159 10168 10180 10188 10201 10211 ...
## $ QUANTITYORDERED : int 20 24 21 35 19 26 19 18 12 2100 ...
## $ PRICEEACH : num 95.7 81.3 94.7 83.3 100 ...
## $ ORDERLINENUMBER : int 3 5 2 6 10 7 9 1 2 14 ...
## $ SALES : int 2871 27659 388434 37467 520527 347976 249777 551232 216854 470844 ...
## $ ORDERDATE : Factor w/ 32 levels "1/15/2004 0:00",..: 15 24 26 29 3 6 7 9 12 1 ...
## $ STATUS : Factor w/ 2 levels "Disputed","Shipped": 2 2 2 2 2 2 2 2 2 1 ...
## $ QTR_ID : int 1 2 3 3 4 4 4 4 4 1 ...
## $ MONTH_ID : int 2 5 7 8 10 10 11 11 12 1 ...
## $ YEAR_ID : int 2003 2003 2003 2003 2003 2003 2003 2003 2003 2004 ...
## $ PRODUCTLINE : Factor w/ 2 levels "Classic Cars",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ MSRP : int 95 95 95 95 95 95 95 95 95 95 ...
## $ PRODUCTCODE : Factor w/ 2 levels "S10_1678","S10_1949": 1 1 1 1 1 1 1 1 1 1 ...
## $ CUSTOMERNAME : Factor w/ 28 levels "Australian Collectors, Co.",..: 15 19 16 25 5 22 7 13 18 2 ...
## $ PHONE : Factor w/ 28 levels "(1) 47.55.6555",..: 16 19 5 23 24 26 12 6 25 1 ...
## $ ADDRESSLINE1 : Factor w/ 28 levels "1785 First Street",..: 17 9 6 16 15 18 2 24 8 3 ...
## $ ADDRESSLINE2 : Factor w/ 5 levels "","Level 3","Level 6",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ CITY : Factor w/ 23 levels "Allentown","Bergen",..: 16 19 17 18 21 4 8 2 21 17 ...
## $ STATE : Factor w/ 9 levels "","CA","CT","MA",..: 7 1 1 2 2 2 1 1 2 1 ...
## $ POSTALCODE : Factor w/ 25 levels "","10022","2067",..: 2 12 17 19 1 21 14 23 1 16 ...
## $ COUNTRY : Factor w/ 10 levels "Australia","Austria",..: 10 4 4 10 10 10 4 5 10 4 ...
## $ TERRITORY : Factor w/ 3 levels "APAC","EMEA",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ CONTACTLASTNAME : Factor w/ 25 levels "Benitez","Berglund",..: 25 10 5 24 4 12 22 19 17 20 ...
## $ CONTACTFIRSTNAME: Factor w/ 25 levels "Adrian","Christina",..: 13 21 3 11 11 12 18 23 11 5 ...
## $ DEALSIZE : Factor w/ 3 levels "Large","Medium",..: 3 3 2 2 2 2 3 2 3 2 ...
# Verificar columnas con missing
which(colSums(is.na(banco_corregido2))!= 0)
## named integer(0)
Utilizando otra librería para imputar datos
library(VIM)
banco_corregido3 <- initialise(bancoTwo, method = "median") #media (continuos) mediana (discretos), moda(no númerico)
str(banco_corregido3)
## 'data.frame': 32 obs. of 25 variables:
## $ ORDERNUMBER : num 10107 10121 10134 10145 10159 ...
## $ QUANTITYORDERED : num 20 24 21 35 19 26 19 18 12 2100 ...
## $ PRICEEACH : num 95.7 81.3 94.7 83.3 100 ...
## $ ORDERLINENUMBER : num 3 5 2 6 10 7 9 1 2 14 ...
## $ SALES : num 2871 27659 388434 37467 520527 ...
## $ ORDERDATE : Factor w/ 32 levels "1/15/2004 0:00",..: 15 24 26 29 3 6 7 9 12 1 ...
## $ STATUS : Factor w/ 2 levels "Disputed","Shipped": 2 2 2 2 2 2 2 2 2 1 ...
## $ QTR_ID : num 1 2 3 3 4 4 4 4 4 1 ...
## $ MONTH_ID : num 2 5 7 8 10 10 11 11 12 1 ...
## $ YEAR_ID : num 2003 2003 2003 2003 2003 ...
## $ PRODUCTLINE : Factor w/ 2 levels "Classic Cars",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ MSRP : num 95 95 95 95 95 95 95 95 95 95 ...
## $ PRODUCTCODE : Factor w/ 2 levels "S10_1678","S10_1949": 1 1 1 1 1 1 1 1 1 1 ...
## $ CUSTOMERNAME : Factor w/ 28 levels "Australian Collectors, Co.",..: 15 19 16 25 5 22 7 13 18 2 ...
## $ PHONE : Factor w/ 28 levels "(1) 47.55.6555",..: 16 19 5 23 24 26 12 6 25 1 ...
## $ ADDRESSLINE1 : Factor w/ 28 levels "1785 First Street",..: 17 9 6 16 15 18 2 24 8 3 ...
## $ ADDRESSLINE2 : Factor w/ 5 levels "","Level 3","Level 6",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ CITY : Factor w/ 23 levels "Allentown","Bergen",..: 16 19 17 18 21 4 8 2 21 17 ...
## $ STATE : Factor w/ 9 levels "","CA","CT","MA",..: 7 1 1 2 2 2 1 1 2 1 ...
## $ POSTALCODE : Factor w/ 25 levels "","10022","2067",..: 2 12 17 19 1 21 14 23 1 16 ...
## $ COUNTRY : Factor w/ 10 levels "Australia","Austria",..: 10 4 4 10 10 10 4 5 10 4 ...
## $ TERRITORY : Factor w/ 3 levels "APAC","EMEA",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ CONTACTLASTNAME : Factor w/ 25 levels "Benitez","Berglund",..: 25 10 5 24 4 12 22 19 17 20 ...
## $ CONTACTFIRSTNAME: Factor w/ 25 levels "Adrian","Christina",..: 13 21 3 11 11 12 18 23 11 5 ...
## $ DEALSIZE : Factor w/ 3 levels "Large","Medium",..: 3 3 2 2 2 2 3 2 3 2 ...
# Verificar columnas con missing
which(colSums(is.na(banco_corregido3))!= 0)
## named integer(0)
Imputación utilizando neighboor más cercanos
library(DMwR2)
banco_corregido4<-knnImputation(bancoTwo, k=10)
str(banco_corregido4)
## 'data.frame': 32 obs. of 25 variables:
## $ ORDERNUMBER : int 10107 10121 10134 10145 10159 10168 10180 10188 10201 10211 ...
## $ QUANTITYORDERED : int 20 24 21 35 19 26 19 18 12 2100 ...
## $ PRICEEACH : num 95.7 81.3 94.7 83.3 100 ...
## $ ORDERLINENUMBER : int 3 5 2 6 10 7 9 1 2 14 ...
## $ SALES : int 2871 27659 388434 37467 520527 347976 249777 551232 216854 470844 ...
## $ ORDERDATE : Factor w/ 32 levels "1/15/2004 0:00",..: 15 24 26 29 3 6 7 9 12 1 ...
## $ STATUS : Factor w/ 2 levels "Disputed","Shipped": 2 2 2 2 2 2 2 2 2 1 ...
## $ QTR_ID : int 1 2 3 3 4 4 4 4 4 1 ...
## $ MONTH_ID : int 2 5 7 8 10 10 11 11 12 1 ...
## $ YEAR_ID : int 2003 2003 2003 2003 2003 2003 2003 2003 2003 2004 ...
## $ PRODUCTLINE : Factor w/ 2 levels "Classic Cars",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ MSRP : int 95 95 95 95 95 95 95 95 95 95 ...
## $ PRODUCTCODE : Factor w/ 2 levels "S10_1678","S10_1949": 1 1 1 1 1 1 1 1 1 1 ...
## $ CUSTOMERNAME : Factor w/ 28 levels "Australian Collectors, Co.",..: 15 19 16 25 5 22 7 13 18 2 ...
## $ PHONE : Factor w/ 28 levels "(1) 47.55.6555",..: 16 19 5 23 24 26 12 6 25 1 ...
## $ ADDRESSLINE1 : Factor w/ 28 levels "1785 First Street",..: 17 9 6 16 15 18 2 24 8 3 ...
## $ ADDRESSLINE2 : Factor w/ 5 levels "","Level 3","Level 6",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ CITY : Factor w/ 23 levels "Allentown","Bergen",..: 16 19 17 18 21 4 8 2 21 17 ...
## $ STATE : Factor w/ 9 levels "","CA","CT","MA",..: 7 1 1 2 2 2 1 1 2 1 ...
## $ POSTALCODE : Factor w/ 25 levels "","10022","2067",..: 2 12 17 19 1 21 14 23 1 16 ...
## $ COUNTRY : Factor w/ 10 levels "Australia","Austria",..: 10 4 4 10 10 10 4 5 10 4 ...
## $ TERRITORY : Factor w/ 3 levels "APAC","EMEA",..: 2 2 2 1 2 1 2 2 1 2 ...
## $ CONTACTLASTNAME : Factor w/ 25 levels "Benitez","Berglund",..: 25 10 5 24 4 12 22 19 17 20 ...
## $ CONTACTFIRSTNAME: Factor w/ 25 levels "Adrian","Christina",..: 13 21 3 11 11 12 18 23 11 5 ...
## $ DEALSIZE : Factor w/ 3 levels "Large","Medium",..: 3 3 2 2 2 2 3 2 3 2 ...
# Verificar columnas con missing
which(colSums(is.na(banco_corregido4))!= 0)
## named integer(0)
banco <- read.csv("sales_data_sample.csv",
sep = ",", stringsAsFactors = TRUE)
# Mostrar datos
head(banco)
# Resumen
summary(banco)
## ORDERNUMBER QUANTITYORDERED PRICEEACH ORDERLINENUMBER
## Min. :10103 Min. : 12.00 Min. : 34.91 Min. : 1.000
## 1st Qu.:10149 1st Qu.: 19.75 1st Qu.: 94.74 1st Qu.: 4.000
## Median :10217 Median : 22.00 Median :100.00 Median : 6.500
## Mean :10234 Mean : 89.25 Mean : 93.99 Mean : 6.688
## 3rd Qu.:10311 3rd Qu.: 26.50 3rd Qu.:100.00 3rd Qu.: 9.000
## Max. :10417 Max. :2100.00 Max. :100.00 Max. :14.000
##
## SALES ORDERDATE STATUS QTR_ID
## Min. : 1451 1/15/2004 0:00 : 1 Disputed:15 Min. :1.000
## 1st Qu.:229198 1/29/2003 0:00 : 1 Shipped :17 1st Qu.:2.000
## Median :378055 10/10/2003 0:00: 1 Median :3.000
## Mean :355021 10/15/2004 0:00: 1 Mean :2.688
## 3rd Qu.:474639 10/20/2003 0:00: 1 3rd Qu.:4.000
## Max. :773793 10/28/2003 0:00: 1 Max. :4.000
## (Other) :26
## MONTH_ID YEAR_ID PRODUCTLINE MSRP
## Min. : 1.000 Min. :2003 Classic Cars: 6 Min. : 95.0
## 1st Qu.: 4.000 1st Qu.:2003 Motorcycles :26 1st Qu.: 95.0
## Median : 7.000 Median :2004 Median : 95.0
## Mean : 6.938 Mean :2004 Mean :117.3
## 3rd Qu.:10.000 3rd Qu.:2004 3rd Qu.: 95.0
## Max. :12.000 Max. :2005 Max. :214.0
##
## PRODUCTCODE CUSTOMERNAME PHONE
## S10_1678:26 Baane Mini Imports : 2 07-98 9555 : 2
## S10_1949: 6 La Rochelle Gifts : 2 2125557818 : 2
## Land of Toys Inc. : 2 40.67.8555 : 2
## Technics Stores Inc. : 2 6505556809 : 2
## Australian Collectors, Co.: 1 (1) 47.55.6555: 1
## Auto Canal Petit : 1 (171) 555-2282: 1
## (Other) :22 (Other) :22
## ADDRESSLINE1 ADDRESSLINE2 CITY
## 67, rue des Cinquante Otages: 2 :28 NYC : 4
## 897 Long Airport Avenue : 2 Level 3 : 1 Burlingame : 2
## 9408 Furth Circle : 2 Level 6 : 1 Madrid : 2
## Erling Skakkes gate 78 : 2 Suite 101: 1 Nantes : 2
## 1785 First Street : 1 Suite 750: 1 Paris : 2
## 184, chausse de Tournai : 1 San Francisco: 2
## (Other) :22 (Other) :18
## STATE POSTALCODE COUNTRY TERRITORY CONTACTLASTNAME
## :16 10022 : 4 USA :14 APAC : 2 Yu : 3
## CA : 5 : 2 France : 6 EMEA :15 Bergulfsen: 2
## NY : 4 4110 : 2 Norway : 3 Japan: 1 Brown : 2
## MA : 2 44000 : 2 Australia: 2 NA's :14 Hernandez : 2
## CT : 1 94217 : 2 Spain : 2 Hirano : 2
## NJ : 1 2067 : 1 Austria : 1 Labrune : 2
## (Other): 3 (Other):19 (Other) : 4 (Other) :19
## CONTACTFIRSTNAME DEALSIZE
## Julie : 4 Large : 6
## Janine : 2 Medium:17
## Jonas : 2 Small : 9
## Juri : 2
## Kwai : 2
## Adrian : 1
## (Other):19
Para todas las columnas
boxplot(banco)
head(banco)
Para QUANTITYORDERED
boxplot(banco$QUANTITYORDERED)
Para PRICEEACH
boxplot(banco$PRICEEACH)
Para SALES
#Gráfico de cajas y bigotes
boxplot(banco$SALES)
Según los resultados, se identifica valores atípicos. Vamos a identificarlo y plantear estrategia de corrección
# Calcular el RIC (RIC = Q3 - Q1)
q1 <- quantile(banco$SALES, 0.25)
q3 <- quantile(banco$SALES, 0.75)
RIC <- q3-q1
RIC
## 75%
## 245441.5
# Limites o bigotes (Superior e inferior)
bigote_inferior <- q1-1.5*RIC
bigote_inferior
## 25%
## -138964.8
bigote_superior <- q3+1.5*RIC
bigote_superior
## 75%
## 842801.2
# Identificar lo valores atípicos
outliers_det <- banco$SALES[banco$SALES < bigote_inferior | banco$SALES > bigote_superior]
outliers_det
## integer(0)
Correción
Eliminar los atípicos
telco_sin_atipicos <- banco[!banco$SALES %in% outliers_det,]
telco_sin_atipicos
Para confirmar vamos a realizar un gráfico de cajas con la nueva data
boxplot(telco_sin_atipicos$SALES)
La transformación y estandarización de variables son técnicas comunes utilizadas en el análisis de datos para mejorar la interpretación de los datos y garantizar que las variables sean comparables entre sí.
#
banco<-read.csv("sales_data_sample.csv", sep = ",", encoding = "latin1", stringsAsFactors = T)
head(banco)
Transformación de raíz cuadrada:
Esta transformación se utiliza para reducir la dispersión de los datos cuando estos tienen una distribución con una varianza que aumenta con el nivel medio de la variable. También puede ayudar a reducir la asimetría.
# Original
hist(banco$QUANTITYORDERED, 12)
Para sacar la raiz cuadrada, simplemente se puede utilizar la función sqrt
sqrt(banco$QUANTITYORDERED)
## [1] 4.472136 4.898979 4.582576 5.916080 4.358899 5.099020 4.358899
## [8] 4.242641 3.464102 45.825757 8.888194 4.795832 5.291503 5.477226
## [15] 5.000000 5.099020 4.795832 5.567764 5.099020 3.464102 4.582576
## [22] 4.472136 4.582576 4.000000 5.830952 4.582576 5.291503 4.690416
## [29] 4.242641 4.582576 4.690416 3.872983
Graficamente
hist(sqrt(banco$QUANTITYORDERED))
Transformación de variables
Se aplica cuando los datos tienen una distribución sesgada hacia la izquierda (asimetría negativa). La transformación exponencial puede ayudar a corregir la asimetría y hacer que los datos se aproximen más a una distribución simétrica.
en r para poder obtener esta transformación, se debe utilizar la función exp()
exp(banco$QUANTITYORDERED)
## [1] 4.851652e+08 2.648912e+10 1.318816e+09 1.586013e+15 1.784823e+08
## [6] 1.957296e+11 1.784823e+08 6.565997e+07 1.627548e+05 Inf
## [11] 2.038281e+34 9.744803e+09 1.446257e+12 1.068647e+13 7.200490e+10
## [16] 1.957296e+11 9.744803e+09 2.904885e+13 1.957296e+11 1.627548e+05
## [21] 1.318816e+09 4.851652e+08 1.318816e+09 8.886111e+06 5.834617e+14
## [26] 1.318816e+09 1.446257e+12 3.584913e+09 6.565997e+07 1.318816e+09
## [31] 3.584913e+09 3.269017e+06
para poder observarlo graficamente se tiene:
hist(exp(banco$QUANTITYORDERED))
Forma 2
QUANTITYORDERED_exp<- exp(banco$QUANTITYORDERED)
hist(QUANTITYORDERED_exp)
Transformación logarítmica:
Esta transformación se utiliza cuando los datos presentan una distribución sesgada hacia la derecha (asimetría positiva). La transformación logarítmica reduce la asimetría y puede facilitar la interpretación de los datos.
Para la transformación logaritmica, utilizar log (dentro de los argumentos se puede cambiar la base)
log(banco$QUANTITYORDERED)
## [1] 2.995732 3.178054 3.044522 3.555348 2.944439 3.258097 2.944439 2.890372
## [9] 2.484907 7.649693 4.369448 3.135494 3.332205 3.401197 3.218876 3.258097
## [17] 3.135494 3.433987 3.258097 2.484907 3.044522 2.995732 3.044522 2.772589
## [25] 3.526361 3.044522 3.332205 3.091042 2.890372 3.044522 3.091042 2.708050
graficamente
hist(log(banco$QUANTITYORDERED))
Cambiar la base 2
log(banco$QUANTITYORDERED, base=2)
## [1] 4.321928 4.584963 4.392317 5.129283 4.247928 4.700440 4.247928
## [8] 4.169925 3.584963 11.036174 6.303781 4.523562 4.807355 4.906891
## [15] 4.643856 4.700440 4.523562 4.954196 4.700440 3.584963 4.392317
## [22] 4.321928 4.392317 4.000000 5.087463 4.392317 4.807355 4.459432
## [29] 4.169925 4.392317 4.459432 3.906891
graficamente
hist(log(banco$QUANTITYORDERED, base=2))
Comparación de transformaciones
#Obtener solo tranaformaciones
QUANTITYORDERED_sqrt <- sqrt(banco$QUANTITYORDERED)
QUANTITYORDERED_exp <- exp(banco$QUANTITYORDERED)
QUANTITYORDERED_ln <- log(banco$QUANTITYORDERED)
QUANTITYORDERED_log2 <- log(banco$QUANTITYORDERED, base=2)
QUANTITYORDERED_log5 <- log(banco$QUANTITYORDERED, base=5)
Ver graficamente cada una:
par(mfrow=c(3,2))
hist(banco$QUANTITYORDERED)
hist(QUANTITYORDERED_sqrt)
hist(QUANTITYORDERED_exp)
hist(QUANTITYORDERED_ln)
hist(QUANTITYORDERED_log2)
hist(QUANTITYORDERED_log5)
par(mfrow=c(1,1))
Este tipo de transformaciones, busca que los datos sean simétricos (distribución forma de campana) o que se cumpla un supuesto estadístico La visualización de la distribución puede mejorarse con la gráfica de densidad
par(mfrow=c(3,2))
plot(density(banco$QUANTITYORDERED), main = "Distribución de cantidad de pedidos originales")
plot(density(QUANTITYORDERED_sqrt), main = "Distribución de cantidad de pedidos transformadas - sqrt")
plot(density(QUANTITYORDERED_exp), main = "Distribución de cantidad de pedidos transformadas - exp")
plot(density(QUANTITYORDERED_ln), main = "Distribución de cantidad de pedidos transformadas - ln")
plot(density(QUANTITYORDERED_log2), main = "Distribución de cantidad de pedidos transformadas - log2")
plot(density(QUANTITYORDERED_log5), main = "Distribución de cantidad de pedidos transformadas - log5")
par(mfrow=c(1,1))
Se puede realizar un análisis general de las variables originales y verificar su comportmiento, a partir de allí se puede aplicar la transformación más adecuado según objetivo.
gráfica general
library(PerformanceAnalytics)
chart.Correlation(cor(banco[,8:10]), histogram = TRUE)
Estandarización de variables:
La estandarización de variables, también conocida como normalización, implica transformar los valores de una variable para que tengan una media de cero y una desviación estándar de uno. Esto se logra restando la media de la variable a cada valor y dividiendo por la desviación estándar.
La estandarización es útil cuando se desea comparar variables que están en diferentes escalas o unidades. Al estandarizar las variables, se eliminan las diferencias en las escalas y se asegura que todas las variables tengan la misma escala relativa.
Por ejemplo, si tienes un conjunto de variables con diferentes unidades de medida, como peso en kilogramos y altura en metros, puedes estandarizar ambas variables para que sean comparables y no se vean afectadas por las diferencias en las unidades.
Metodo 1: por partes
banco$SALES
## [1] 2871 27659 388434 37467 520527 347976 249777 551232 216854 470844
## [11] 396566 233312 318864 367676 417735 409968 259739 439438 435804 439614
## [21] 773793 1451 73311 320712 243456 751608 540462 720911 732906 73741
## [31] 109935 486024
media_SALES<- mean(banco$SALES)
media_SALES
## [1] 355020.8
desv_est <- sd(banco$SALES)
desv_est
## [1] 221108.3
SALES_estandar <- (banco$SALES-media_SALES) / desv_est
SALES_estandar
## [1] -1.5926575 -1.4805496 0.1511167 -1.4361912 0.7485297 -0.0318615
## [7] -0.4759832 0.8873983 -0.6248830 0.5238299 0.1878950 -0.5504489
## [13] -0.1635255 0.0572351 0.2836354 0.2485079 -0.4309283 0.3817909
## [19] 0.3653556 0.3825869 1.8939683 -1.5990797 -1.2740807 -0.1551676
## [25] -0.5045710 1.7936328 0.8386892 1.6548004 1.7090499 -1.2721359
## [31] -1.1084424 0.5924840
Metodo 2: Directo
media_SALES_estandar2 <- (banco$SALES-mean(banco$SALES))/sd(banco$SALES)
media_SALES_estandar2
## [1] -1.5926575 -1.4805496 0.1511167 -1.4361912 0.7485297 -0.0318615
## [7] -0.4759832 0.8873983 -0.6248830 0.5238299 0.1878950 -0.5504489
## [13] -0.1635255 0.0572351 0.2836354 0.2485079 -0.4309283 0.3817909
## [19] 0.3653556 0.3825869 1.8939683 -1.5990797 -1.2740807 -0.1551676
## [25] -0.5045710 1.7936328 0.8386892 1.6548004 1.7090499 -1.2721359
## [31] -1.1084424 0.5924840
Metodo 3: apoyarse en la funciones de R
R tiene multiple funciones para estandarizacion, la clasica es la funcion scale
SALES_estandar3 <- scale(banco$SALES)
SALES_estandar3
## [,1]
## [1,] -1.5926575
## [2,] -1.4805496
## [3,] 0.1511167
## [4,] -1.4361912
## [5,] 0.7485297
## [6,] -0.0318615
## [7,] -0.4759832
## [8,] 0.8873983
## [9,] -0.6248830
## [10,] 0.5238299
## [11,] 0.1878950
## [12,] -0.5504489
## [13,] -0.1635255
## [14,] 0.0572351
## [15,] 0.2836354
## [16,] 0.2485079
## [17,] -0.4309283
## [18,] 0.3817909
## [19,] 0.3653556
## [20,] 0.3825869
## [21,] 1.8939683
## [22,] -1.5990797
## [23,] -1.2740807
## [24,] -0.1551676
## [25,] -0.5045710
## [26,] 1.7936328
## [27,] 0.8386892
## [28,] 1.6548004
## [29,] 1.7090499
## [30,] -1.2721359
## [31,] -1.1084424
## [32,] 0.5924840
## attr(,"scaled:center")
## [1] 355020.8
## attr(,"scaled:scale")
## [1] 221108.3
La ventaja de la funcion de R, es que se puede enviar todo el caso
banco_cuanti_scale <- scale(banco[,8:10])
banco_cuanti_scale
## QTR_ID MONTH_ID YEAR_ID
## [1,] -1.4349031 -1.39227576 -0.9366141
## [2,] -0.5845901 -0.54633606 -0.9366141
## [3,] 0.2657228 0.01762374 -0.9366141
## [4,] 0.2657228 0.29960364 -0.9366141
## [5,] 1.1160357 0.86356345 -0.9366141
## [6,] 1.1160357 0.86356345 -0.9366141
## [7,] 1.1160357 1.14554335 -0.9366141
## [8,] 1.1160357 1.14554335 -0.9366141
## [9,] 1.1160357 1.42752325 -0.9366141
## [10,] -1.4349031 -1.67425566 0.4906074
## [11,] -1.4349031 -1.39227576 0.4906074
## [12,] -0.5845901 -0.82831596 0.4906074
## [13,] -0.5845901 -0.54633606 0.4906074
## [14,] -0.5845901 -0.26435616 0.4906074
## [15,] 0.2657228 0.01762374 0.4906074
## [16,] 0.2657228 0.29960364 0.4906074
## [17,] 0.2657228 0.58158354 0.4906074
## [18,] 1.1160357 0.86356345 0.4906074
## [19,] 1.1160357 1.14554335 0.4906074
## [20,] 1.1160357 1.14554335 0.4906074
## [21,] 1.1160357 1.14554335 0.4906074
## [22,] 1.1160357 1.42752325 0.4906074
## [23,] -1.4349031 -1.39227576 1.9178288
## [24,] -1.4349031 -1.11029586 1.9178288
## [25,] -0.5845901 -0.82831596 1.9178288
## [26,] -0.5845901 -0.54633606 1.9178288
## [27,] -1.4349031 -1.67425566 -0.9366141
## [28,] -1.4349031 -1.11029586 -0.9366141
## [29,] -0.5845901 -0.54633606 -0.9366141
## [30,] 0.2657228 0.01762374 -0.9366141
## [31,] 0.2657228 0.58158354 -0.9366141
## [32,] 1.1160357 0.86356345 -0.9366141
## attr(,"scaled:center")
## QTR_ID MONTH_ID YEAR_ID
## 2.6875 6.9375 2003.6562
## attr(,"scaled:scale")
## QTR_ID MONTH_ID YEAR_ID
## 1.1760376 3.5463521 0.7006621
boxplot(banco_cuanti_scale)
\[ X_{norm}=\frac{\left(X_i-X_{\min }\right)}{X_{\max }-X_{\min }} \]
Metodo 1:
SALES_normal <- (banco$SALES-min(banco$SALES))/(max(banco$SALES)-min(banco$SALES))
SALES_normal
## [1] 0.001838564 0.033933154 0.501051348 0.046632191 0.672080503 0.448667818
## [7] 0.321523367 0.711836207 0.278895878 0.607752783 0.511580362 0.300205090
## [13] 0.410974672 0.474174653 0.538989204 0.528932778 0.334421798 0.567089450
## [19] 0.562384281 0.567317328 1.000000000 0.000000000 0.093041684 0.413367394
## [25] 0.313339168 0.971275678 0.697891608 0.931530332 0.947061017 0.093598432
## [31] 0.140461091 0.627407288
Metodo 2:
library(scales)
rescale(banco$SALES)
## [1] 0.001838564 0.033933154 0.501051348 0.046632191 0.672080503 0.448667818
## [7] 0.321523367 0.711836207 0.278895878 0.607752783 0.511580362 0.300205090
## [13] 0.410974672 0.474174653 0.538989204 0.528932778 0.334421798 0.567089450
## [19] 0.562384281 0.567317328 1.000000000 0.000000000 0.093041684 0.413367394
## [25] 0.313339168 0.971275678 0.697891608 0.931530332 0.947061017 0.093598432
## [31] 0.140461091 0.627407288
Aplicando a todo el caso (var cuantitativas) la funcion rescale solo se permite aplicarse a vectores, no es posible directamente apicar al data frame.
library(caret)
## Loading required package: lattice
pre_procesamiento <- preProcess(banco[,4:9]) # Asi por defecto muestra la estandarizacion z
predict(pre_procesamiento, banco[,4:9])
library(caret)
pre_procesamiento <- preProcess(banco[,4:9], method = "range") # Asi por defecto muestra la estandarizacion z
predict(pre_procesamiento, banco[,4:9])
Que es regresión lineal simple?
La regresión lineal simple (RLS) es un modelo estadístico que se utiliza para predecir una variable dependiente continua (Y) a partir de una única variable independiente (X). La RLS busca establecer una relación lineal entre las dos variables.
Ingresamos los datos
datos <- read.csv("sales_data_sample.csv")
# Seleccionar las columnas
dataPredic <- datos[, c("QUANTITYORDERED", "ORDERLINENUMBER")]
# Ver el data frame
str(datos)
## 'data.frame': 32 obs. of 25 variables:
## $ ORDERNUMBER : int 10107 10121 10134 10145 10159 10168 10180 10188 10201 10211 ...
## $ QUANTITYORDERED : int 20 24 21 35 19 26 19 18 12 2100 ...
## $ PRICEEACH : num 95.7 81.3 94.7 83.3 100 ...
## $ ORDERLINENUMBER : int 3 5 2 6 10 7 9 1 2 14 ...
## $ SALES : int 2871 27659 388434 37467 520527 347976 249777 551232 216854 470844 ...
## $ ORDERDATE : chr "2/24/2003 0:00" "5/7/2003 0:00" "7/1/2003 0:00" "8/25/2003 0:00" ...
## $ STATUS : chr "Shipped" "Shipped" "Shipped" "Shipped" ...
## $ QTR_ID : int 1 2 3 3 4 4 4 4 4 1 ...
## $ MONTH_ID : int 2 5 7 8 10 10 11 11 12 1 ...
## $ YEAR_ID : int 2003 2003 2003 2003 2003 2003 2003 2003 2003 2004 ...
## $ PRODUCTLINE : chr "Motorcycles" "Motorcycles" "Motorcycles" "Motorcycles" ...
## $ MSRP : int 95 95 95 95 95 95 95 95 95 95 ...
## $ PRODUCTCODE : chr "S10_1678" "S10_1678" "S10_1678" "S10_1678" ...
## $ CUSTOMERNAME : chr "Land of Toys Inc." "Reims Collectables" "Lyon Souveniers" "Toys4GrownUps.com" ...
## $ PHONE : chr "2125557818" "26.47.1555" "+33 1 46 62 7555" "6265557265" ...
## $ ADDRESSLINE1 : chr "897 Long Airport Avenue" "59 rue de l'Abbaye" "27 rue du Colonel Pierre Avia" "78934 Hillside Dr." ...
## $ ADDRESSLINE2 : chr "" "" "" "" ...
## $ CITY : chr "NYC" "Reims" "Paris" "Pasadena" ...
## $ STATE : chr "NY" "" "" "CA" ...
## $ POSTALCODE : chr "10022" "51100" "75508" "90003" ...
## $ COUNTRY : chr "USA" "France" "France" "USA" ...
## $ TERRITORY : chr NA "EMEA" "EMEA" NA ...
## $ CONTACTLASTNAME : chr "Yu" "Henriot" "Da Cunha" "Young" ...
## $ CONTACTFIRSTNAME: chr "Kwai" "Paul" "Daniel" "Julie" ...
## $ DEALSIZE : chr "Small" "Small" "Medium" "Medium" ...
head(datos)
Pasos para construir un modelo de regresión:
Paso 1: Determinar las variables X,Y
* Variable independiente (X): Inversión * Variable dependiente (y): ganancia
Paso 2: Evaluar la relación entre variables (Correlación) graficamente
Diagrama de dispersión o puntos
plot(x=dataPredic$QUANTITYORDERED,y=dataPredic$ORDERLINENUMBER)
pairs(dataPredic)
Coeficiente de correlación
# Mediante la función cor
cor(dataPredic) # Matriz de correlaciones
## QUANTITYORDERED ORDERLINENUMBER
## QUANTITYORDERED 1.0000000 0.3678606
## ORDERLINENUMBER 0.3678606 1.0000000
Coeficiente de correlación:
r = 0.3678606
Interpretación: Existe correlación positiva
entre la inversión y la ganancia.
Como en este caso el coeficiente de correlación es superior a 0.35, es viable la regresión.
Paso 3: Regresión
Regresión lineal simple
Para obtener el modelo, se va a utilizar una función de R > lm
# lm, notación: Y ~ X, data=
modelo1 <- lm(QUANTITYORDERED ~ ORDERLINENUMBER, data=dataPredic)
# Resumen de resultados
summary(modelo1)
##
## Call:
## lm(formula = QUANTITYORDERED ~ ORDERLINENUMBER, data = dataPredic)
##
## Residuals:
## Min 1Q Median 3Q Max
## -302.27 -152.86 -33.37 45.18 1740.82
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -157.61 129.39 -1.218 0.2327
## ORDERLINENUMBER 36.91 17.04 2.167 0.0383 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 347 on 30 degrees of freedom
## Multiple R-squared: 0.1353, Adjusted R-squared: 0.1065
## F-statistic: 4.695 on 1 and 30 DF, p-value: 0.03832
Modelo final con los resultados:
Modelo general
$ = -157.61 +36.91 X $
Modelo para el caso:
\(\hat{ganancia} = -157.61 + 36.91 Inversión\)
Que es regresión lineal múltiple?
La regresión lineal múltiple (RLM) es una técnica estadística que se utiliza para predecir una variable dependiente continua a partir de dos o más variables independientes. Es una extensión de la regresión lineal simple, la cual solo considera una variable independiente.
modeloMulti <- lm(banco$QUANTITYORDERED ~ banco$ORDERLINENUMBER + banco$SALES)
summary(modeloMulti)
##
## Call:
## lm(formula = banco$QUANTITYORDERED ~ banco$ORDERLINENUMBER +
## banco$SALES)
##
## Residuals:
## Min 1Q Median 3Q Max
## -295.30 -148.89 -47.50 58.48 1719.69
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.191e+02 1.668e+02 -1.313 0.1994
## banco$ORDERLINENUMBER 3.712e+01 1.723e+01 2.155 0.0396 *
## banco$SALES 1.693e-04 2.850e-04 0.594 0.5572
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 350.8 on 29 degrees of freedom
## Multiple R-squared: 0.1457, Adjusted R-squared: 0.0868
## F-statistic: 2.473 on 2 and 29 DF, p-value: 0.1019
Que es regresión lineal logistica?
La regresión lineal logística (RLL) es un modelo estadístico que se utiliza para predecir la probabilidad de que ocurra un evento a partir de una o más variables independientes. A diferencia de la regresión lineal simple o múltiple, que se utiliza para predecir valores continuos, la RLL se utiliza para predecir variables categóricas binarias (por ejemplo, sí/no, éxito/fracaso, presente/ausente).
# lm, notación: Y ~ X, data=
# modeloLog <- glm(banco$quantity ~ banco$item_price + banco$transaction_amount, data = banco, family = binomial())
# Resumen de resultados
# summary(modelo1)