Modelo de clasificación binaria para datos no balanceados

14

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:

  1. ¿Qué puedo hacer para mejorar la cantidad de golpes positivos?
  2. ¿Cómo se puede determinar si hay un sobreajuste en tal caso? (He intentado trazar, etc.)
  3. ¿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)
  4. ¿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?
  5. ¿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]]
tejaskhot
fuente

Respuestas:

11
  1. Como está haciendo una clasificación binaria, ¿ha intentado ajustar el umbral de clasificación? Como su algoritmo parece bastante insensible, trataría de reducirlo y verificar si hay una mejora.

  2. Siempre puede usar las Curvas de aprendizaje , o una gráfica de un parámetro del modelo frente a un error de Entrenamiento y Validación para determinar si su modelo está sobreajustado. Parece que no es adecuado en su caso, pero eso es solo intuición.

  3. Bueno, en última instancia, depende de su conjunto de datos y de los diferentes modelos que ha probado. En este punto, y sin más pruebas, no puede haber una respuesta definitiva.

  4. Sin pretender ser un experto en el tema, hay varias técnicas diferentes que puede seguir (pista: primer enlace en google ), pero en mi opinión, primero debe asegurarse de elegir cuidadosamente su función de costos, de modo que represente lo que en realidad estás buscando

  5. No estoy seguro de lo que quieres decir con intuición de patrones, ¿puedes explicarlo?

Por cierto, ¿cuáles fueron sus resultados con los diferentes algoritmos que probó? ¿Eran diferentes?

insys
fuente
1
Ajustar el umbral para la regresión logística hizo el truco. Gracias por la lista de fuentes.
tejaskhot
¿Alguien puede pegar un fragmento de código de cómo ajusta un umbral de regresión logística?
Blenz
0

Dado que los datos son muy asimétricos, en ese caso también podemos intentar la capacitación modelo después de sobremuestrear datos.

SMOTE y ADASYN son algunas de las técnicas que podemos usar para sobremuestrear los datos.

vipin bansal
fuente