Ho un set di dati con le seguenti specifiche:
- Set di dati di addestramento con 193.176 campioni con 2.821 positivi
- Set di dati di prova con 82.887 campioni con 673 positivi
- Ci sono 10 funzioni.
Voglio eseguire una classificazione binaria (0 o 1). Il problema che sto affrontando è che i dati sono molto sbilanciati. Dopo aver normalizzato e ridimensionato i dati insieme ad alcune funzionalità ingegneristiche e usando un paio di algoritmi diversi, questi sono i migliori risultati che ho potuto ottenere:
mean square error : 0.00804710026904
Confusion matrix : [[82214 667]
[ 0 6]]
cioè solo 6 colpi positivi corretti. Questo sta usando la regressione logistica. Ecco le varie cose che ho provato con questo:
- Diversi algoritmi come RandomForest, DecisionTree, SVM
- Modifica del valore dei parametri per chiamare la funzione
- Alcune tecniche di intuizione basate sull'intuizione per includere funzionalità composte
Ora, le mie domande sono:
- Cosa posso fare per migliorare il numero di successi positivi?
- Come si può determinare se in questo caso c'è un eccesso di vestibilità? (Ho provato a tramare ecc.)
- A che punto si potrebbe concludere se forse questo è il miglior adattamento possibile che potrei avere? (che sembra triste considerando solo 6 risultati su 673)
- Esiste un modo per far pesare di più le istanze positive del campione in modo che il riconoscimento del pattern migliori, portando a più hit?
- Quali grafici grafici potrebbero aiutare a rilevare valori anomali o qualche intuizione su quale modello si adatterebbe meglio?
Sto usando la libreria scikit-learn con Python e tutte le implementazioni sono funzioni di libreria.
modificare:
Ecco i risultati con alcuni altri algoritmi:
Classificatore di foresta casuale (n_estimators = 100)
[[82211 667]
[ 3 6]]
Alberi decisionali:
[[78611 635]
[ 3603 38]]