Clasificador de productos en inventario
Introducción
Este proyecto busca desarrollar un sistema de clasificación para un conjunto de productos de una organización. Los datos comprenden un archivo csv, con 198.917 artículos con 13 atributos tal como se muestra en la figura 1.Figura 1. |
Algunos atributos se pueden entender con su nombre sin embargo explicare los siguientes como aclaración:
- SKU_number: Identificador unico del producto.
- Order: Orden de pedido
- SoldFlag: Atributo booleano si se ha vendido durante los 6 meses anteriores (1 = Verdad, 0 = Falso).
- MarketingType = Tipo de segmento al que va dirigido el producto (D o S).
- New_Release_Flag = Productos que podrían tener un nuevo lanzamiento (si New_Release_Flag >= 1).
Al limpiar estos atributos de los datos iniciales se obtiene una tabla como se muestra en la figura 2:
Figura 2. |
El objetivo de este sistema es predecir para cada ítem cual será el valor del atributo SoldFlag, esto implica que si el valor es 1 (verdadero), el ítem continuará en el inventario mientras que un valor de 0 (falso) descartará el ítem.
Los datos que se buscan predecir son 122.921 . De igual manera, los datos empleados para el entrenamiento son 75.996 . Los datos empleados para la construcción y entrenamiento de los sistemas son 26.127, de los cuales 2.613 datos se usará para validar (nivel de precisión) los sistemas de clasificación. El total de datos que pertenecen a la clase D son 97.971 de los cuales 35.119 son datos históricos y 62.852 son los ítem a predecir. El total de datos que pertenecen a la clase S son 100.949 de los cuales 40.877 son datos históricos y 60.072 son ítem para predecir.
A continuación se desarrollarán dos sistemas clasificadores. El primero es una Red Neuronal Artificial. El segundo, consiste en una Regresión Logística.
Los datos que se buscan predecir son 122.921 . De igual manera, los datos empleados para el entrenamiento son 75.996 . Los datos empleados para la construcción y entrenamiento de los sistemas son 26.127, de los cuales 2.613 datos se usará para validar (nivel de precisión) los sistemas de clasificación. El total de datos que pertenecen a la clase D son 97.971 de los cuales 35.119 son datos históricos y 62.852 son los ítem a predecir. El total de datos que pertenecen a la clase S son 100.949 de los cuales 40.877 son datos históricos y 60.072 son ítem para predecir.
A continuación se desarrollarán dos sistemas clasificadores. El primero es una Red Neuronal Artificial. El segundo, consiste en una Regresión Logística.
Creación y evaluación del clasificador
Red Neuronal Artificial
Para cada tipo de Elemento clasificado como D o S (ver atributo «MarketingType»), se entrenará y evaluará la precisión de los clasificadores.
Inicialmente importamos las librerías que se necesitan para el desarrollo de un clasificador MLP (Red Neuronal Artificial).
Inicialmente importamos las librerías que se necesitan para el desarrollo de un clasificador MLP (Red Neuronal Artificial).
# -*- coding: utf-8 -*- ''' Python 3.5.2 ''' import pandas as pd from sklearn.neural_network import MLPClassifierEn este segundo paso iniciamos el clasificador que consiste en una red neuronal con 6 neuronas en una capa oculta, las 6 neuronas. Los datos usados para el entrenamiento son 90% de los datos históricos de los cuales se conoce el valor del atributo «SoldFlag» y el 10% restante lo usaremos para evaluar la precisión del clasificador. Esto se hace para la clase D y la clase S de los ítem.
Los datos que corresponde al 90% de los datos como se muestra:
- X_train_D: son los datos históricos de clase D.
- Y_Train_D: son el valor del atributo «SoldFlag» para los datos X_train_D.
# Construcción y entrenamiento del clasificador Red Neuronal Artificial
clf_D = MLPClassifier(activation="tanh",solver="lbfgs",hidden_layer_sizes=(6, 1))
clf_D.fit(X_train_D[:31608],Y_train_D[:31608]) prediction_D_train = clf_D.predict(X_train_D[31608:])El nivel de precisión de este clasificador se computa a continuación:
# Cálculo de precisón
accuracy = 0
for i in range(0, len(prediction_D_train)):
if Y_train_D["SoldFlag"].ix[31608+i] == prediction_D_train["Prediction D"].ix[i]: accuracy += 1 print("Precision del MLP: ", accuracy/len(prediction_D_train)*100," %")Ahora que se conoce el nivel de precisión del clasificador, procedemos a realizar la evaluación de nuestros datos objetivos que se presentan a continuación:# Nivel de precisiónPrecision del MLP: 72.03076046710339 %.
- X_test_D: son los ítem clase D sin valor del atributo «SoldFlag» y presenta un total de 62.852 ítem para clasificar.
# Predicción de los ítem no históricos
prediction_D_test = clf_D.predict(X_test_D)Esta predicción nos arroja que los 62.852 ítem presentan un valor de 0 (Falso) en el atributo objetivo y un nivel de precisión del clasificador del 72%. Lo que implica que estos ítem se deberían omitir del inventario. La figura 3 muestra el resultado final de la tabla par la clase D:
Figura 3. |
- X_train_S: son los datos históricos de clase S.
- Y_train_S: son el valor del atributo «SoldFlag» para los datos X_train_S.
- X_test_S: son los ítem clase S sin valor del atributo «SoldFlag» y presentan un total de 60.069 ítem.
# Construcción y entrenamiento del clasificador Red Neuronal Artificial
clf_S = MLPClassifier(activation="tanh",solver="lbfgs",hidden_layer_sizes=(6, 1)) clf_S.fit(X_train_S[:36790],Y_train_S[:36790])Y se obtiene un nivel de precisión del 90.70% en la clasificación de los datos. Se nota que 4 referencias del inventario para este tipo de clasificador se podrían seguir manteniendo. La figura 4 muestra las referencias evaluadas como 1 en el atributo «SoldFlag».
Figura 4. |
Regresión logística.
Al igual que en el clasificador anterior importaremos las siguientes librería:
# -*- coding: utf-8 -*- ''' Python 3.5.2 ''' from sklearn.neural_network import MLPClassifier
# Variable para llamar al RL
logistic_R = LogisticRegression()Para la clase D entrenamos nuestro clasificador asi:
# Entrenamiento del clasificador RL
logistic_D_train = logistic_R.fit(X_train_D[:31608],Y_train_D[:31608])Con el cual se obtiene un nivel de precisión del 72.97%. Finalmente, al realizar la predicción de los datos «X_test_D» se muestra que existen 1.869 datos valorados como 1, tal como muestra la figura 5:
Figura 5. |
Figura 6. |
Conclusiones
- Para ambos clasificadores en los elementos de clase D se muestra un nivel de precisión en promedio del 72.5% .
- Para ambos clasificadores en los elementos de clase S se muestra un nivel de precisión promedio de 90.5% .
- Para la clase D se observa que la proporción de datos útiles (usados para el entrenamiento y validación ) representan el 17.6% del total de datos, mientras que para la clase S este valor de datos útiles es de 20.5%. Lo cual explica que en ambos clasificadores haya una variación de aproximadamente 20 puntos porcentuales en el nivel de precisión entre la clase S y la clase D.
- De igual forma, la relación de datos para entrenar y la cantidad de datos para predecir para las clases D y S es respectivamente 0.56 y 0.68, lo cual explica que, para este caso, una relación de este tipo que este más cerca de 1 muestra un mejor desempeño de los clasificadores.
Comentarios
Publicar un comentario