Estoy en el negocio de fintech y tengo datos a nivel de cliente como los siguientes:
| Identificación del cliente | día 1 | dia 2 | día 3 | día 4 |
|---|---|---|---|---|
| 1 | 50 | 0 | Yaya | 5 |
| 2 | Yaya | 10 | Yaya | Yaya |
| 3 | -100 | -100 | 5 | 0 |
| 4 | 10 | -60 | 0 | 100 |
| 5 | 20 | Yaya | -20 | Yaya |
En los datos anteriores, las filas representan la identificación única del cliente, las columnas representan el día específico del año y los valores representan el saldo neto de crédito y débito en ese día específico.
Por ejemplo, para el ID = 1 el day1 1, el credit = 100 y el debit = 50 , por lo tanto, el valor neto es 50. Cero significa credit = debit en ese día.
NaN en mis datos simplemente muestra que en ese día específico, el cliente no realizó ninguna transacción de crédito o débito desde la aplicación, y este conocimiento es importante para mí. Sea NaN la instancia de NO INTERACCIÓN .
Ahora mi pregunta es ¿cómo le digo a K-Means en scikit-learn python que trate los valores de NaN como Sin interacción? No quiero eliminar los valores de NaN . Tampoco quiero reemplazar los valores de NaN con valores medios o medianos. Los valores de NaN son información adicional para mí y ¿cómo retengo esta información?
import numpy as np df_no = df.replace(np.nan, 'no', regex=True)Las k-medias y otros métodos de agrupamiento que utilizan la distancia ( distancia euclidiana ) para calcular.
Para calcular la distancia necesitas números y todo debe ser cuantitativo.
Exacto, debes borrarlos o reemplazar esos valores de NaN por el mejor representativo (mediana o media o 0).
¿Cómo decido?
¿Qué cliente crees que está más cerca del cliente número 1?
cliente 2, 3 o 4?
| Identificación del cliente | día 1 | dia 2 | día 3 | día 4 |
|---|---|---|---|---|
| 1 | 50 | 0 | Yaya | 5 |
| 2 | 50 | 0 | 0 | 5 |
| 3 | 50 | 0 | mediana | 5 |
| 4 | 50 | 0 | significar | 5 |