Vous êtes sur la page 1sur 15

Caso práctico en la industria

Un experimento estadístico para la predicción de los costos.


Ing. Leonardo G. Hernández

Introducción
Este estudio pretende ayudar a la empresa saber que factores influyen en el comportamiento de sus
costos y poder lograr un modelo que pueda predecir el comportamiento de estos para mejorar en la
medida que se pueda la influencia de los mismos. Cabe mencionar que los factores que se estudiaran
serán los que son hasta cierto punto controlables por la empresa aunque también unos cuantos externos
que necesitan interactuár con los controlables.

Metodología
Se planea aplicar para este estudio técnicas estadísticas a los datos de una empresa de transporte que
nos permitan de manera rápida fácil y visual exponer las áreas de oportunidad a los distintos factores
que intervienen en el desempeño eficiente de la empresa en general.
Necesitamos saber si, ¿la combinación de ciertos factores, posee alguna influencia en el valor de la
variable respuesta?, Dicho de otro modo, nos preguntamos si la conclusión sobre el efecto que cada
factor tiene valor sobre la variable respuesta, para este caso los costos de transporte. Con el análisis de
la regresión podremos observar este comportamiento, ejemplificando el estudio puede responder si la
interacción del chófer en conjunto con la ruta determina si el costo de transporte es influyente en los
viajes no. A partir de esto se podría deducir si es mejor darle una asignación preferencial sobre las rutas
al chófer
Una vez obtenido resultados a partir de este estudio sabremos que factores son los mas significantes
para el proceso de transporte en la empresa,también es necesario saber el nivel de relación existe en
cada uno y poder dar un pronostico del comportamiento entre factores. Entonces esto consistirá en
marcar la tendencia de cada factor en comparación con la variable de salida, y si tienen un
comportamiento lineal, es decir si el factor siempre influirá de la misma manera en el resultado.

Equipo y Software
Ahora, para este estudio nos apoyamos en un poderoso software especializado en estadística llamado R.
Este es un software gratuito libre de licencia, utiliza su propio lenguaje de programación el cual tiene la
ventaja de no tener limites al momento de manejar grandes bases de datos como Excel, minitab u otros,
por ello consideramos este apto para realizar el estudio. El software y su documentación esta disponible
libremente en la su pagina del proyecto http://www.r-project.org/.
Nos apoyaremos en el uso de Microsoft Excel en el uso de tablas dinámicas para la clasificación y
ordenamiento de los datos que tengamos disponibles para el estudio, cabe señalar que este no es
totalmente necesario ya que con un administrador de base de datos podría hacer el trabajo mas
eficiente, para este caso nos limitamos a usar Microsoft Excel dado que nuestra fuente de
entrenamiento se encuentra en este formato.
Clasificación y ordenamiento de datos.
Para el estudio es necesario primeramente clasificar los datos y consecuentemente tener un
ordenamiento. R es muy flexible al momento de recolectar los datos, inclusive R puede interactuar con
bases de datos como Microsoft SQL server, Oracle, MySQL, Sybase, ODBC, entre otros. Cabe señalar
la capacidad de ejecutar queries en la misma interfaz.

Para simplificar el estudio en R, usaremos archivos de texto(.txt) ordenados en columnas que se


ejemplifican de la siguiente manera.
Unidad personal cliente costo
1 3 41 3943.03
1 3 166 1060
1 15 41 19631.54
1 18 41 7280.91
1 20 41 62485.54
1 20 166 2800
1 26 41 6779.6
1 28 41 19809.73
1 32 41 3601.9
1 34 41 16151.74
1 35 41 1628.03
1 36 41 69987.82
1 40 41 57133.65
1 40 166 7868
1 46 41 7045.46
1 61 41 12430.26
1 61 45 2800
10 1 41 27724.67
10 1 247 29396
...

Este formato tiene como características principales que cada encabezado y numero este separado con
un tabulador para que al momento de ingresarlos a R este lo identifique como separador. De columnas,
este se obtiene fácilmente de Microsoft Excel ordenando las celdas, copiando des de Excel y pegando
directamente en un archivo de Texto.

Mediante queries en excel se unifico una sola hoja los datos de entrenamiento que nos arrojo
información que a nuestro considerar es mas importante para nuestro estudio, entonces clasificamos los
siguientes datos por cada viaje en columnas.
• Costo total de operación
• Unidad utilizada.
• Ruta.
• Cliente.
• Operador.

Estos datos son suficientes para observar el comportamiento de los viajes dentro de nuestro estudio.
Claramente se pueden omitir o agregar mas factores, según se vea la necesidad de establecer un análisis
de comportamiento u cambiar la variable de salida.

También nuestros datos de entrenamiento están clasificados por fechas, dada la magnitud de datos se ve
la necesidad de reducirlo a muestras mas pequeñas según queramos la magnitud de nuestros valores a
predecir.

Ejemplo tabla dinámica en excel.


Para recolectar los datos en R desde un archivo de texto haremos lo siguiente
cam <- read.table("costotrec.txt", header=TRUE)

Donde asignamos a un arreglo de datos con el nombre “cam” la tabla del archivo de texto, que como
única opción hemos especificado que la tabla si tiene encabezado y el nombre del archivo esta entre
comillas.
Al momento de llamar a cam R nos muestra lo siguiente

Que son los datos ordenados listos para ser trabajados.

Ahora bien extraemos columna por columna de datos para dejarlo listo para nuestro análisis de la
siguiente manera asignándolos a diferentes cadenas según su numero de columna en cam.
> clie <- cam[,3]
> perso <- cam[,2]
> cost <- cam[,4]
> cami <- cam[,1]

Análisis de regresión
El objetivo de esta regresión lineal es encontrar los mejores valores de los coeficientes estimados del
modelo propuesto con el objetivo de minimizar el error residual entre los valores experimentales y los
predictivos. Para este estudio nuestro objetivo es encontrar que factores o variables afectan a nuestra
variable de salida de distintas maneras y poder establecer un modelo que pueda predecir valores de la
variable de salida. Entendemos como variable de salida al gasto o costo generado por la interacción de
1 o mas factores, en nuestro caso podemos estudiar directamente el costo asociado a los viajes o el
rendimiento de el viaje.
Existen diferentes tipos de modelo para hacer un análisis de regresión lineal, el modelo mas sencillo
por tratar es:
Y salida =0 1 X

Donde β0es la interceptan teórica de Y y β1 la pendiente teórica Como habíamos dicho el objetivo es
reducir el error residual, así que el modelo final seria.
Y salida =b 0b1 X e

En lenguaje R no es necesario escribir el modelo tal cual, la sintaxis básica es


lm(Y ~ model)

Entonces por ejemplo para este modelo la sintaxis seria


> lm(Y ~ X)

Dado que haremos un análisis de regresión de varios factores para observar el comportamiento de los
factores en la variable de salida, es necesario también observar el comportamiento de estos en conjunto
con sus interacciones por lo cual debemos usar un modelo de regresión completo de primer orden.
Delos datos obtenidos en la clasificación podemos establecer distintos modelos, usaremos en este caso
distintos.
Para ejemplificar nuestro modelo mas generalizado, tenemos unidad, cliente, operador como factores y
nuestra variable de salida es el Costo. Entonces
Y = Costo
A = Unidad
B = Cliente
C = Operador

Nuestro modelo seria


Y =01 A2 B3 C4 AB5 BC 6 AC 7 ABC

Traducido en lenguaje R tenemos su equivalente


lm(cost~cami*clie*perso)
Para obtener información mas relevante y ademas obtener acceso a otras funciones del análisis para
manipular los datos, es mejor crear un objeto que contenga el resultado para el modelo. En este caso
“est”
est <-lm(cost~cami*clie*perso)
Este objeto puede ser usado como un argumento para otros comandos. Para obtener un resumen
estadístico mas completo para el modelo usaremos summary()
> est<-lm(cost~cami*clie*perso)
> summary(est)

La respuesta de R es la siguiente en su formato original.


Call:
lm(formula = cost ~ cami * clie * perso)

Residuals:
Min 1Q Median 3Q Max
-177368 -42371 -15283 4747 1236473

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -7.501e+04 3.534e+04 -2.123 0.03415 *
cami 9.266e+03 1.601e+03 5.786 1.11e-08 ***
clie 1.715e+02 2.409e+02 0.712 0.47672
perso 1.089e+03 6.121e+02 1.778 0.07578 .
cami:clie -2.976e+01 9.372e+00 -3.175 0.00157 **
cami:perso -8.180e+01 2.777e+01 -2.945 0.00334 **
clie:perso -2.731e+00 3.716e+00 -0.735 0.46258
cami:clie:perso 3.194e-01 1.544e-01 2.068 0.03899 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 123100 on 666 degrees of freedom


Multiple R-squared: 0.1091, Adjusted R-squared: 0.09969
F-statistic: 11.65 on 7 and 666 DF, p-value: 5.147e-14

La sección 'residuales' arroja datos de entre las señales experimentales y prevista. Las estimaciones
para los coeficientes del modelo se proporcionan junto con el de sus desviaciones estándar , se
proporciona el t-valor y la probabilidad de una hipótesis nula de que los coeficientes tienen valores de
cero.
En este caso, por ejemplo, vemos que no hay pruebas de que la intersección (βo) es diferente de cero y
una fuerte evidencia de que la pendiente de los camiones (β1) es significativamente diferente de cero.
Esto quiere decir que el camión que se este usando tiene una fuerte influencia en el costo total del viaje,
esto lo corroboran los códigos de sifnificancia que se encuentran en el resumen dado que muestran un
alto grado de interacción según la precisión del error.
Una rápida conclusión que podemos observar en este resultado es analizando los códigos de
sifnificancia(los asteriscos al final de cada fila), donde solo el tipo de camión es un dato confiable para
el modelo de regresión, pero aun no podemos tomar estas conclusiones como confiables dado que
tenemos que hacer pruebas al modelo para saber si este es bueno o los datos que se nos proporcionan
obedecen a la realización de un buen modelo, estas pruebas las mencionamos mas adelante.

En la parte inferior de la tabla se encuentra la desviación estándar de la regresión (sr o error estándar
residual), el coeficiente de determinacion R-squared que nos dice que el valos es mas cercano a o que a
1, por lo tanto nuestros datos no son confiables y el resultado de prueba F en la hipótesis nula de que la
MSreg / Msres es 1.
Para obtener directamente los coeficiente del modelo podemos utilizar
coef(est)
Lo cual nos dará
(Intercept) perso clie cami perso:clie
-7.501293e+04 1.088660e+03 1.714865e+02 9.265929e+03 -2.731035e+00
perso:cami clie:cami perso:clie:cami
-8.179843e+01 -2.976023e+01 3.194275e-01

Que podríamos decir que nuestro modelo


Y =01 A2 B3 C4 AB5 BC 6 AC 7 ABC
quedaría de la siguiente manera
Y =−7.501293e+041.088660e+03 A1.714865e+02 B9.265929e+03 C−2.731035 AB
−8.179843e+01 BC −2.976023e+01 AC 3.194275e-01 ABC
Si quisiéramos conocer los valores del residuo de cada una de nuestras combinaciones debemos
introducir
> resid(est)
El cual desplegara una lista de todos los valores residuales de la combinación de nuestros datos.

Evaluando los resultados.


Si aun no estamos seguros sobre nuestro modelo y queremos hacer otras pruebas de confiabilidad para
el resultado de una regresión lineal tenemos otras pruebas. Una de las distintas maneras de hacerlo es
examinar visualmente los residuos. Si el modelo es adecuado, entonces el error residual debe ser al azar
y se distribuye normalmente. Además, la eliminación de un caso no debería afectar significativamente
la confiabilidad del modelo. R proporciona cuatro métodos gráficos para evaluar un modelo utilizando
el comando plot().
> layout(matrix(1:4,2,2))
> plot(est)
Esto nos arroja cuatro gráficas donde nuestros residuos se expresan de la siguiente manera
R e s i d u a ls v s F i t t e d S c a le - L o c a t i o n
563

3 .0
563 529
575
529

S t a n d a rd iz e d re s id u a ls
1e+06

575

2 .0
R e s id u a ls

5e+05

1 .0
0e+00

0 .0
-5 0 0 0 0 50000 150000 250000 -5 0 0 0 0 50000 150000 250000

F itt e d va lu e s F it t e d va lu e s

N o rm a l Q -Q R e s i d u a ls v s L e v e r a g e
563 563
10

10
S t a n d a rd iz e d re s id u a ls

S t a n d a r d iz e d r e s id u a ls

529
575 575
8
8

584
1
6
6

0 .5
4
4

2
2

0
0

C o o k 's d i s t a n c e
-2

-3 -2 -1 0 1 2 3 0 .0 0 0 .0 5 0 .1 0 0 .1 5

T h e o re t ic a l Q u a n t ile s L e ve ra g e

La gráfica en la parte superior izquierda muestra los errores residuales representa en función de sus
valores ajustados. Los residuos deben ser distribuidos al azar alrededor de la línea horizontal que
representa un error residual de cero, es decir, no debe haber una clara tendencia en la distribución de
puntos. Para este caso se puede observar una leve tendencia en los residuales lo cual no es buena señal
para nuestro modelo.

La Gráfica en la parte inferior izquierda es una normal QQ plot, que debería sugerir que los errores
residuales tienen una distribución normal. Esta gráfica para el ejemplo muestra que la tendencia no es
lineal, que existen datos que hacen que nuestros errores se disparen y forme una especie de curva. La
gráfica escala-ubicación en la esquina superior derecha muestra la raíz cuadrada de los residuales
estandarizados (una especie de raíz cuadrada del error relativo) en función de los valores ajustados.
Una vez más, no debería haber ninguna tendencia clara en este gráfico. También para el ejemplo la
tendencia esta marcada.

Por último, la gráfica en la parte inferior derecha muestra la tendencia de los puntos, que es una medida
de su importancia en la determinación de los resultados de regresión. Superpuestas a la gráfica están las
curvas de nivel para la distancia de Cook, que es otra medida de la importancia de cada observación a
la regresión. Distancias más pequeñas significa que la eliminación de la observación tiene poco efecto
sobre los resultados de la regresión. Distancias de más de 1 son sospechosas y sugieren la presencia de
un valor atípico posible o un mal modelo.

Ahora bien las gráficas en primera instancia no nos dieron una buena conclusión sobre nuestro modelo
debemos corroborarlo numéricamente, para esto usamos el Test de normalidad de Kolmorogov
Smirnov el cual nos dice si nuestros residuos obedecen a una tendencia normal, si este es positivo
entonces nuestro modelo y conclusiones serán confiables. Para este caso en R esto es sencillo con los
datos hacemos lo siguiente.
fit <- aov(cost~perso*clie*cami) #Obtenemos el analisis de Varianza
res <- fit$residuals #extraemos los residuales
mu <- mean(res); #Obtenemos la media residual
sigma <- sd(res); #Y la desviacion estandar
ks.test(res,pnorm, mu, sigma) #Ejecutamos el test de Kolmorogov
Esto nos indicara si las conclusiones son confiables, el valor de p que arroja este test es de entre 0 y 1,
si este es cero nuestros residuos no obedecen una tendencia normal y por lo tanto nuestros datos y
conclusiones no son confiables en analogía si este es 1 tendremos certeza de que nuestras conclusiones
son confiables.
El resultado para este ejemplo fue
One-sample Kolmogorov-Smirnov test

data: res
D = 0.2643, p-value < 2.2e-16
alternative hypothesis: two-sided
Lo que indica que nuestras conclusiones no pueden ser confiables y para certificar esto podemos hacer
una ultima prueba.

Dado que tenemos el modelo podemos obtener los valores predictivos de cada combinación de factores
y así poder compararlos con los valores reales, si los valores predecido son buenos al graficarlos contra
los reales tenderían simular una linea recta, para obtener estos valores en R usaremos el comando
fitted() que nos dará todos los valores de las combinaciones
cosp <- fitted(est)
plot(cost,cosp)
250000
200000
150000
100000
cosp

50000
0
-5 0 0 0 0

0 200000 400000 600000 800000 1200000

cost

Y la gráfica de resultados será.

Esta claramente no marca tendencia normal asi que podemos descartar las conclusiones del modelo y
decir que este no es bueno.
Conclusiones
El experimento realizado esta adaptado a la necesidad de la empresa para observar sus datos, por lo
que se puede concluir que para el estudio futuro este es de gran utilidad ya que solo se tendria que
ajustar muy poco y que los factores que se quieran comparar pueden ser adaptados a este.
Para el ejemplo de muestra podemos concluir que el modelo no fue bueno debido a distintas causas,
que pudieron afectar la salida de esto.
Una posible causa es la clasificación de los datos, que esta no haya sido buena y por ello nuestro
modelo resulto ser poco confiable. Otra causa también puede radicar en los mismos datos que no tienen
los datos completos para establecer un buen modelo. Y finalmente también el problema puede radicar
en que tal vez existan datos que se disparen y hagan que nuestro modelo también sufra las
consecuencias.
Esto no quiere decir que el experimento este mal estructurado se puede hacer mejorando la estructura
de la clasificación de los datos. En el apéndice se mostraran mas ejemplos un poco mas cercanos a
conclusiones confiables.

Bibliografía
Julian J. Faraway, Practical Regression and Anova using R, 2002.
Department of Electrical Engineering and Computer Science, Using R for Linear Regression,
Montefiore Institute.
http://www.personality-project.org/R/r.lm.html
www.r-project.org/
Apendice
Ejemplos.
Ejemplo de analisis sobre el costo de viaje contra unidad, cliente y ruta.
El formato del archivo se verá asi
ruta unidad cliente Total
1 10 41 2842.77
1 11 247 2480
1 24 247 2480
1 42 247 2480
1 8 41 2289.97
1 8 198 1600
3 10 41 3774.84
...

Editando nuestro script en R


cam <- read.table("d98.txt", header=TRUE)
cam <- cam[1:900,]
clie <- cam[,3]
ruta <- cam[,1]
cami <- cam[,2]
cost <- cam[,4]
fit <- aov(cost~ruta*clie*cami) #Análisis de varianza para análisis de residuos
summary(fit)
res <- fit$residuals
mu <- mean(res); #Media de residuos
sigma <- sd(res); #Desviación standar de los residuos
ks.test(res,pnorm, mu, sigma) #Test de confiabilidad Kolmogorov Smirnov

fit2<-lm(cost~ruta*clie*cami) #Análisis de Regresión


summary(fit2) #Resumen de Análisis de regresión
layout(matrix(1:4,2,2))
plot(fit2) #Gráficos de análisis
e<-coef(fit2) #Coeficientes del modelo

cosp <- fitted(fit2); #Costo predecido para las combinaciones de factores


layout(1)
plot(cost,cosp) #Gráfico comparativo entre costos reales y predictivos

Nuestra salida es la siguiente


One-sample Kolmogorov-Smirnov test

data: res
D = 0.1398, p-value = 9.992e-16
alternative hypothesis: two-sided

Warning message:
In ks.test(res, pnorm, mu, sigma) :
cannot compute correct p-values with ties

Call:
lm(formula = cost ~ ruta * clie * cami)

Residuals:
Min 1Q Median 3Q Max
-5303.8 -691.6 -175.2 453.5 5979.8

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6700.41082 621.97895 10.773 < 2e-16 ***
ruta -105.94571 39.34439 -2.693 0.007219 **
clie -8.65252 6.04202 -1.432 0.152478
cami 86.39947 24.82362 3.481 0.000525 ***
ruta:clie 0.91279 0.49641 1.839 0.066277 .
ruta:cami -3.20847 1.56503 -2.050 0.040647 *
clie:cami -0.55016 0.23379 -2.353 0.018828 *
ruta:clie:cami 0.02964 0.01721 1.722 0.085436 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1552 on 892 degrees of freedom


Multiple R-squared: 0.1931, Adjusted R-squared: 0.1868
F-statistic: 30.5 on 7 and 892 DF, p-value: < 2.2e-16
Graficas de confiabilidad
gráfica comparando valores reales con predecidos.

Para este ejemplo se nota una clara mejoría en la confiabilidad de los datos, si bien el test de
Kolmogorov no mostró evidencia dado un apalancamiento en los datos, las gráficas dicen que nuestras
conclusiones pueden ser confiables. Dado que los residuos presentan una tendencia casi lineal, salvo
unos cuantos datos que se disparan y también el comparativo entre los valores reales y los predecidos
que si bien no presenta una distribución totalmente lineal se puede observar que muestra cierta
tendencia.
De este modelo podemos decir que el tipo de camión es realmente influyente en los viajes y la ruta
también lo es pero en menor escala, y la interacción entre estos 2 factores es influyente pero muy poco,
por lo cual se podría deducir que el rendimiento del viaje podría ser mejor si se determinaran las
unidades optimas para cada ruta.

Vous aimerez peut-être aussi