Mostrando entradas con la etiqueta Preproc. Mostrar todas las entradas
Mostrando entradas con la etiqueta Preproc. Mostrar todas las entradas

sábado, 10 de noviembre de 2018

Binarizar variables continuas

El siguiente script transforma las variables continuas en múltiples variables binarias (0,1) que indican a qué cuartil pertenece la observación para cada variable.

NOTA: En algunas situaciones esto puede significar una perdida de información, para detalle sobre esto, ver referencias 1 y 2.


Conceptualmente sería así:


















Calcular acumulados con Pandas


Si se tiene un dataset con transacciones históricas de usuarios, y se quiere hacer variables que midan acumulados en cada momento (eje: monto consumo en últimos 30dias, promedio consumo el últimos 90 días, etc.), puede usarse el siguiente script que usa funciones de pandas para calcularlo.

Conceptualmente seria así:














Script:
import pandas as pd

def cumulative(data, id2, fdate, not_feature, windows=[30, 90]):
    """calcula acumulados para describir tendencia"""
    data2 = data.copy()
    headers = data2.columns.values.tolist()
    headers = [x for x in headers if x not in not_feature]
    for col in headers:
        print('calculating windows for:',col)
        for d in windows:
            nd = str(d)+'d'
            data2[col+'_sum_'+nd] = data2.set_index('fecha').groupby(id2)[col].rolling(nd).sum().values
    return data2

if __name__ == '__main__':
    path = 'https://www.dropbox.com/s/3g4rz8a0lpvkag4/payment.csv?dl=1'
    data = pd.read_csv(path)
    data['fecha'] = pd.to_datetime(data['fecha'])
    data = data.sort_values(['user_id', 'fecha'], ascending=[True, True])
    not_feature = ['fecha', 'user_id']
    data2 = cumulative(data, 'user_id', 'fecha', not_feature, windows=[30, 90])
    data2.to_csv('data2.csv')



sábado, 9 de diciembre de 2017

Discretizar variables continuas

Una forma de discretizar una variable continua es calcular los cuantiles y luego crear variable dummy con cada cuantil. Esta transformación es usada para entrenar modelos predictivos. Para detalle sobre cúando conviene discretizar, ver referencia 1 y 2, para otros métodos de discretización, ver referencia 3 y 4.

El siguiente script calcula los deciles de la variable total_day_calls y luego  imprime el script (sql o qlik) para crear variables dummy de cada rango.


Conceptualmente seria así:

















y la transformacion queda así:




















lunes, 7 de agosto de 2017

Crear variables dummy de un texto

Para identificar la secuencia de palabras mas repetidas en un texto, y luego hacer variables dummy en SQL, teniendo algo como:















domingo, 16 de abril de 2017

Creación de variables de grupo

Si se tiene un dataset para predecir una clase, y dentro de las variables existen algunas que son discretas (como ciudad, empresa, rubro, etc), puede usarse esta variable discreta para crear nuevas variables "dummies" que agrupen los valores que mejor ajusten la clase a predecir.

En este ejemplo se transforma la variable discreta "state" para crear una matriz dispersa con valores dummies, luego se ajusta un modelo usando el algoritmo ExtraTreesClassifier para predecir la clase "churn". Después de tener el modelo se extrae la importancia de las variables para identificar (usando percentiles) las nuevas variables dummies a crear.

Nota: Para la importancia de la variable, el algoritmo ExtraTreesClassifier usa la medida "Mean Decrease Impurity Importance", también llamado "Gini importance", "Mean Decrease Gini", etc. Para detalles, ver Referencia No.1. Para detalles sobre sesgos en el calculo de la importancia, ver Referencia No.2. Para ver las imágenes, estas se pueden descargar AQUI


El proceso conceptual sigue estos pasos:

PASO 1
Cargar el dataset que contiene la variable a predecir (churn en este caso) y la variable discreta a descomponer. Seria algo así:
















PASO 2
Transoformar variable discreata en matriz dispersa, usando la función get_dummies de la librería pandas, quedando así: