Contamos con una base de 11,196 observaciones con las características de las motos publicadas y el tiempo en que se vendieron. Entre las variables descriptivas de las motos tenemos Color, Distancia Recorrida, País, No. Fotos, Precio y Tiempo Publicado antes de venderse (o censurarse). A continuación se dará un ejemplo de los datos:
## Bike_id Publish_period End_Date
## 1 XL3-1095127 10 1.301357e+18
## 2 XL3-1095127 4 1.301702e+18
## 3 XL3-1123648 28 1.302307e+18
## 4 XL3-1139930 17 1.302826e+18
## 5 XL3-1139930 7 1.303430e+18
## 6 XL3-1277412 17 1.301616e+18
## Departure_Date Distance_travelled Color
## 1 1.305590e+18 123525 Silver
## 2 1.305590e+18 123525 Silver
## 3 1.307923e+18 120000 Silver
## 4 1.308096e+18 149374 Silver
## 5 1.308096e+18 149374 Silver
## 6 1.310170e+18 112167 Black
## Country_Sold N_Photos Price N_Inquires is_sold
## 1 Vietnam 27 110000 34 0
## 2 Vietnam 27 90000 34 1
## 3 Vietnam 28 110000 53 1
## 4 Vietnam 27 130000 34 0
## 5 Vietnam 27 110000 34 1
## 6 Vietnam 26 150000 58 0
El objetivo de este proyecto es automatizar el etiquetado del precio para un sitio de motocicletas usadas. Como almacenar las motos nos genera costos, lo que buscamos es elegir un precio tal que las motos se vendan pronto. Para ello, queremos ver cuáles de estas variables son significativas en el tiempo de venta de las motos. A través de la variable de tiempo de publicación, obtuvimos el comportamiento de supervivencia, graficando la supervivencia de acuerdo a cada una de las variables que podrían dar información, observamos que no son proporcionales, por lo que ninguna de las variables anteriores aportababa mayor información para el tiempo de venta (de acuerdo al modelo de Cox).
El único factor relevante encontrado era el precio al que se publicaba, donde a precios más bajos se vendían más pronto.
Entonces nuestro problema es asignar el mejor precio de acuerdo a las características de la moto. Para ello se realizó una regresión lineal múltiple del precio respecto a las demás variables con los datos históricos considerando como variables Color, Distancia Recorrida, País, No. Fotos, Precio. Se agregó la variable “Tiempo de publicación” al modelo para que influyera en tiempo de venta de las motocicletas, esta variable se usa en la predicción de los precios como el tiempo que esperamos que alguna moto esté en nuestro almacen. Existío un problema:
## Publish_period
## -213.0214
Con esto, el modelo querría decir que entre menos tiempo esperemos que esté la motocicleta en almacen, mayor será el precio, lo cual estaría contradiciendo el hecho de que las motocicletas se venden más rápido entre menor sea el precio. Es por ello que hicimos que los tiempos de publicación fueran negativos, de esta forma la relación sería inversa al modelo anterior.
Con los datos obtenidos de la regresión lineal, construimos una función que predice el precio. Separamos los datos, tomamos el 90% de ellos en la variable TRAIN y un 10% en la variable PRED, se utilizan los datos de TRAIN para poder crear un modelo para predecir los precios de acuerdo a los datos que queramos asginar, mientras que los datos de PRED nos darán un intervalo de los precios óptimos con un 50% de confianza, considerando la relación donde a menor precio el producto es vendido más rápido.
##
## Call:
## lm(formula = Price ~ Pp + Distance_travelled + N_Photos + Color +
## Country_Sold, data = TRAIN)
##
## Residuals:
## Min 1Q Median 3Q Max
## -71393 -17789 2010 18562 124830
##
## Coefficients:
## Estimate Std. Error t value
## (Intercept) 1.021e+05 1.276e+04 8.002
## Pp 2.130e+02 2.147e+01 9.921
## Distance_travelled -9.656e-02 8.876e-03 -10.879
## N_Photos -3.715e+02 5.791e+01 -6.416
## ColorBlack -6.354e+03 1.206e+04 -0.527
## ColorBlue -8.935e+03 1.204e+04 -0.742
## ColorBrown 5.904e+01 2.082e+04 0.003
## ColorGray -4.412e+03 1.215e+04 -0.363
## ColorGreen -9.186e+03 1.216e+04 -0.755
## ColorMaroon -1.285e+04 1.257e+04 -1.022
## ColorOther -2.735e+04 2.186e+04 -1.251
## ColorPearl -7.439e+03 1.206e+04 -0.617
## ColorPink -1.096e+04 1.210e+04 -0.906
## ColorPurple -1.064e+04 1.848e+04 -0.576
## ColorRed -1.351e+04 1.204e+04 -1.122
## ColorSilver -9.046e+03 1.204e+04 -0.751
## ColorWhite -7.548e+03 1.210e+04 -0.624
## ColorYellow -1.478e+04 1.216e+04 -1.215
## Country_SoldArmenia 1.359e+04 5.326e+03 2.552
## Country_SoldAruba 6.263e+03 5.455e+03 1.148
## Country_SoldBahamas 6.676e+03 4.930e+03 1.354
## Country_SoldBotswana 8.330e+02 4.995e+03 0.167
## Country_SoldBrunei 5.767e+03 5.257e+03 1.097
## Country_SoldBurundi 1.543e+04 1.439e+04 1.072
## Country_SoldCambodia 6.297e+03 3.920e+03 1.606
## Country_SoldCanada -5.455e+02 2.434e+04 -0.022
## Country_SoldCayman Islands 3.245e+03 6.293e+03 0.516
## Country_SoldChile 1.033e+04 4.494e+03 2.299
## Country_SoldCommonwealth Of Dominica -6.471e+01 6.967e+03 -0.009
## Country_SoldD.R.Congo 7.196e+03 8.501e+03 0.846
## Country_SoldGrenada -1.618e+04 8.872e+03 -1.824
## Country_SoldGuatemala 6.938e+03 7.170e+03 0.968
## Country_SoldIndonesia -2.922e+03 4.028e+03 -0.726
## Country_SoldKazakhstan 7.004e+03 2.434e+04 0.288
## Country_SoldLaos 8.546e+02 3.816e+03 0.224
## Country_SoldLiberia 5.295e+03 2.434e+04 0.218
## Country_SoldMalawi 5.882e+03 5.067e+03 1.161
## Country_SoldMalaysia 1.655e+04 4.462e+03 3.710
## Country_SoldMicronesia 5.129e+03 4.779e+03 1.073
## Country_SoldMyanmar -2.372e+03 4.542e+03 -0.522
## Country_SoldNew Zealand 4.868e+04 1.262e+04 3.859
## Country_SoldNigeria 3.932e+03 1.745e+04 0.225
## Country_SoldPapua New Guinea 6.921e+03 1.742e+04 0.397
## Country_SoldPhilippine 1.160e+04 3.893e+03 2.980
## Country_SoldPhilippines 1.739e+04 7.922e+03 2.196
## Country_SoldRussian Federation 2.212e+04 1.062e+04 2.082
## Country_SoldSaint Kitts And Nevis 2.247e+03 7.680e+03 0.293
## Country_SoldSamoa -3.094e+03 1.439e+04 -0.215
## Country_SoldSt.Lucia 3.819e+03 1.440e+04 0.265
## Country_SoldSt.Maarten 2.041e+04 1.747e+04 1.168
## Country_SoldThailand -4.717e+02 5.176e+03 -0.091
## Country_SoldTurks And Caicos Islands 1.579e+04 9.317e+03 1.695
## Country_SoldUganda 5.066e+03 5.995e+03 0.845
## Country_SoldVietnam 1.535e+04 3.948e+03 3.888
## Pr(>|t|)
## (Intercept) 1.36e-15 ***
## Pp < 2e-16 ***
## Distance_travelled < 2e-16 ***
## N_Photos 1.46e-10 ***
## ColorBlack 0.598372
## ColorBlue 0.458149
## ColorBrown 0.997738
## ColorGray 0.716449
## ColorGreen 0.450034
## ColorMaroon 0.306720
## ColorOther 0.210923
## ColorPearl 0.537379
## ColorPink 0.364761
## ColorPurple 0.564658
## ColorRed 0.261769
## ColorSilver 0.452486
## ColorWhite 0.532654
## ColorYellow 0.224318
## Country_SoldArmenia 0.010736 *
## Country_SoldAruba 0.250961
## Country_SoldBahamas 0.175724
## Country_SoldBotswana 0.867554
## Country_SoldBrunei 0.272627
## Country_SoldBurundi 0.283663
## Country_SoldCambodia 0.108207
## Country_SoldCanada 0.982117
## Country_SoldCayman Islands 0.606185
## Country_SoldChile 0.021538 *
## Country_SoldCommonwealth Of Dominica 0.992590
## Country_SoldD.R.Congo 0.397313
## Country_SoldGrenada 0.068249 .
## Country_SoldGuatemala 0.333201
## Country_SoldIndonesia 0.468147
## Country_SoldKazakhstan 0.773514
## Country_SoldLaos 0.822826
## Country_SoldLiberia 0.827772
## Country_SoldMalawi 0.245718
## Country_SoldMalaysia 0.000208 ***
## Country_SoldMicronesia 0.283196
## Country_SoldMyanmar 0.601425
## Country_SoldNew Zealand 0.000115 ***
## Country_SoldNigeria 0.821729
## Country_SoldPapua New Guinea 0.691139
## Country_SoldPhilippine 0.002892 **
## Country_SoldPhilippines 0.028145 *
## Country_SoldRussian Federation 0.037350 *
## Country_SoldSaint Kitts And Nevis 0.769805
## Country_SoldSamoa 0.829793
## Country_SoldSt.Lucia 0.790908
## Country_SoldSt.Maarten 0.242808
## Country_SoldThailand 0.927386
## Country_SoldTurks And Caicos Islands 0.090188 .
## Country_SoldUganda 0.398094
## Country_SoldVietnam 0.000102 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 24030 on 10022 degrees of freedom
## Multiple R-squared: 0.0763, Adjusted R-squared: 0.07141
## F-statistic: 15.62 on 53 and 10022 DF, p-value: < 2.2e-16
Veamos un ejemplo donde tenemos una motocicleta que ha recorrido 123,525 km, es de color plata, se venderá en Vietnam y tenemos 27 fotos de ella. Haremos la predicción para un tiempo de publicación esperado de 10 y 50 días.
## fit lwr upr Tiempo_publicado
## 1 88557.79 72326.57 104789.0 10
## 2 97078.65 80824.61 113332.7 50
Para hacerlo “más interesante”, simularemos la elección de una persona de un precio dentro del intervalo de predicción dado por nuestro modelo, esta elección dependerá de otros factores como el que tan bien se vea físicamente la motocicleta. Supondremos que la decisión de esta persona distribuye normal (0,0.0625), esto querrá decir que la elección se encontrará al rededor y muy cercano al punto medio del intervalo. Se ajustará de la siguiente manera:
\[ precio.elegido = precio.medio + (rnorm*(precio.medio - precio.inferior)) \]
Mostrando algunos resultados:
## fit lwr upr norm precio_ajustado
## 3220 95419.30 79173.99 111664.60 -0.14011891 93143.02
## 8826 79053.41 62826.64 95280.18 -0.05754437 78119.65
## 4579 81141.15 64915.66 97366.63 0.38967708 87463.85
## 9884 80695.50 64474.66 96916.34 0.01762710 80981.43
## 10526 78538.23 62279.81 94796.65 0.03232193 79063.73
## 510 78531.05 62297.93 94764.18 0.42876625 85491.27
Se puede observar que la relación de entre menor tiempo de publicadón esperado mayor precio se cumple.
Después de generar el modelo de los precios, calculamos la función de riesgo base partir de la información histórica, para posteriormente hacer el análisis a través del Modelo de Cox con los nuevos precios para el mismo periodo de tiempo. Queremos comprobar que los tiempos de venta son menores con nuestro modelo.
## Call:
## coxph(formula = Surv(Publish_period, is_sold) ~ Price, data = data_p9)
##
## n= 11196, number of events= 5824
##
## coef exp(coef) se(coef) z Pr(>|z|)
## Price -1.746e-05 1.000e+00 4.711e-07 -37.08 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## exp(coef) exp(-coef) lower .95 upper .95
## Price 1 1 1 1
##
## Concordance= 0.642 (se = 0.004 )
## Rsquare= 0.117 (max possible= 1 )
## Likelihood ratio test= 1391 on 1 df, p=0
## Wald test = 1375 on 1 df, p=0
## Score (logrank) test = 1421 on 1 df, p=0
Obtenemos la siguiente función de riesgo acumulado:
## hazard time
## 1 0.01909909 0
## 2 0.04116424 1
## 3 0.06490709 2
## 4 0.09058726 3
## 5 0.11486921 4
## 6 0.14185944 5
## 7 0.17332358 6
## 8 0.21025825 7
## 9 0.24318726 8
## 10 0.27600337 9
## 11 0.30851874 10
## 12 0.34406245 11
## 13 0.37846128 12
## 14 0.41309781 13
## 15 0.44950707 14
## 16 0.48331384 15
## 17 0.51353754 16
## 18 0.54594744 17
## 19 0.58101883 18
## 20 0.61841590 19
## 21 0.66082483 20
## 22 0.69609590 21
## 23 0.73720133 22
## 24 0.77449295 23
## 25 0.81332889 24
## 26 0.85030623 25
## 27 0.88757695 26
## 28 0.93311852 27
## 29 0.97818177 28
## 30 1.01330597 29
## 31 1.04247007 30
## 32 1.07649791 31
## 33 1.10450283 32
## 34 1.13472940 33
## 35 1.17894940 34
## 36 1.21506832 35
## 37 1.26220870 36
## 38 1.30276256 37
## 39 1.34785787 38
## 40 1.40895566 39
## 41 1.44350744 40
## 42 1.47698621 41
## 43 1.50635358 42
## 44 1.55064528 43
## 45 1.57012653 44
## 46 1.60163609 45
## 47 1.63644228 46
## 48 1.70908743 47
## 49 1.75690958 48
## 50 1.80087373 49
## 51 1.81485906 50
## 52 1.86107871 51
## 53 1.87847480 52
## 54 1.89768589 53
## 55 1.92873652 54
## 56 1.95216673 55
## 57 1.97764365 56
## 58 2.00498089 57
## 59 2.08557632 58
## 60 2.12592891 59
## 61 2.14929924 60
## 62 2.17451394 61
## 63 2.17451394 63
## 64 2.20372050 65
## 65 2.23369999 66
## 66 2.30353324 67
## 67 2.34395801 69
## 68 2.44199983 71
## 69 2.44199983 72
## 70 2.50601936 74
## 71 2.58183803 75
## 72 2.58183803 78
## 73 2.67268661 80
## 74 2.79595890 81
## 75 2.79595890 83
## 76 2.79595890 90
## 77 3.03136306 100
## 78 3.43078745 111
## 79 4.22963621 183
Para poder evaluar en cualquier punto de la función de reisgo acumulado, aproximaremos dicha función.
Claramente se puede ver que la aproximación es buena.
Creamos una aproximación de la función de supervivencia de la siguiente manera:
\[ \hat{S_0}(t)=e^{-\hat{H_0}(t)} \]
\[ => \hat{S}(t|X_1) = \hat{S_0}(t)*e^{\beta_1X_1} \] Con esta función podremos estimar la probabilidad de que se venda la motocicleta con los precios actualizados evaluando en el tiempo t, esto nos servirá para poder comparar los tiempos de supervivencia con los precios históricos y los precios actualizados. Para fines prácticos, elegiremos aquelos valores menores a 0.2 como aquellos en los que la motocicleta se vendió rápidamente, pues esto significa que se vendió rápido con una probabilidad del 80%.
Comparando las supervivencias de las motos con los precios históricos y con los precios estimados, vemos que disminuye para tiempos cortos. Es decir, se venden más rápido.