Tengo un conjunto de datos con las siguientes especificaciones:
- Conjunto de datos de entrenamiento con 193,176 muestras con 2,821 positivos
- Conjunto de datos de prueba con 82.887 muestras con 673 positivos
- Hay 10 características.
Quiero realizar una clasificación binaria (0 o 1). El problema que enfrento es que los datos están muy desequilibrados. Después de normalizar y escalar los datos junto con algunas características de ingeniería y usar un par de algoritmos diferentes, estos son los mejores resultados que podría lograr:
mean square error : 0.00804710026904
Confusion matrix : [[82214 667]
[ 0 6]]
es decir, solo 6 golpes positivos correctos. Esto está usando regresión logística. Aquí están las varias cosas que probé con esto:
- Diferentes algoritmos como RandomForest, DecisionTree, SVM
- Cambiar el valor de los parámetros para llamar a la función
- Alguna ingeniería de características basada en la intuición para incluir características compuestas
Ahora, mis preguntas son:
- ¿Qué puedo hacer para mejorar la cantidad de golpes positivos?
- ¿Cómo se puede determinar si hay un sobreajuste en tal caso? (He intentado trazar, etc.)
- ¿En qué punto se podría concluir si tal vez este es el mejor ajuste posible que podría tener? (lo que parece triste considerando solo 6 hits de 673)
- ¿Hay alguna manera de hacer que las instancias de muestra positivas pesen más para que el reconocimiento de patrones mejore y genere más visitas?
- ¿Qué gráficas podrían ayudar a detectar valores atípicos o alguna intuición sobre qué patrón encajaría mejor?
Estoy usando la biblioteca scikit-learn con Python y todas las implementaciones son funciones de biblioteca.
editar:
Aquí están los resultados con algunos otros algoritmos:
Clasificador de bosque aleatorio (n_estimators = 100)
[[82211 667]
[ 3 6]]
Árboles de decisión:
[[78611 635]
[ 3603 38]]
Dado que los datos son muy asimétricos, en ese caso también podemos intentar la capacitación modelo después de sobremuestrear datos.
fuente