Marcelino Mayorga Quesada

El caso del fraude eléctrico

El objetivo de este documento es presentar a nivel práctico la definición del proceso con la utilización de un dataset de caso real.

Para este ejercicio se aprovecha la competención abierta "AI Tunisia Hack 2019" para la resolución "detección de fraude en electricidad". Dicha competención fué publicada en el sitio web Zindi, una página similar a Kaggle enfocada en el área Asiática; que a su vez provee un dataset que contiene información sobre el cliente y su facturación, se se acerca mucho a las necesidades descritas sobre la compañía.

La Compañía Tunecina de Electricidad y Gas (STEG) fué quién brindó la información, es una empresa pública y no administrativa, responsable del suministro de electricidad y gas en Túnez. La empresa sufrió enormes pérdidas del orden de 200 millones de dinares tunecinos debido a manipulaciones fraudulentas de los contadores por parte de los consumidores.

Consideraciones

  1. La base del ejemplo práctico fue inspirado de los competidores que obtuvieron la 4ta posición. Dado el enfoque del actividad éste fue estudiado y ajustado para su presentación.
  2. Cada escenario es diferente con sus respectivos retos, por lo que todas las técnicas pueden que no sean aplicables, se intentará representar lo mas cercano posible.
  3. Se utiliza únicamente el dataset de entrenamiento, este se divide para su validación.

Definición del Dataset Fuente

Client data

Información del cliente provista por la compañía STEG, a continuación los detalles para cada columna:

Nombre Columna Descripcion
Client_id ID único de cliente
District Distrito al que el cliente pertenece
Client_catg Categoría de cliente
Region Región a la que el cliente pertenece
Creation_date Fecha de ingreso del cliente
Target Variable de salida que indica con un 1 si es fraude y 0 si no lo es

Invoice data

Información de la facturación de cada cliente, a continuación los detalles para cada columna:

Nombre Columna Descripcion
Client_id ID único de cliente, relación con la table cliente
Invoice_date Fecha de facturación
Tarif_type Tipo de impuesto
Counter_number número del medidor
Counter_statue estado del medidor, toma hasta 5 valores: working fine, not working, on hold statue, etc.
Counter_code Código de medidor
Reading_remarque Notas que toma el agente de STEG cuando visita al cliente (por ejemplo: Si el medidor muestra incorrecto, el agente da razón)
Counter_coefficient Un coeficiente adicional a ser sumado cuando el consumo estándar es excedido
Consommation_level_1 Nivel de consumo 1
Consommation_level_2 Nivel de consumo 2
Consommation_level_3 Nivel de consumo 3
Consommation_level_4 Nivel de consumo 4
Old_index Índice viejo
New_index Índice viejo
Months_number número de meses
Counter_type Tipo de medidor

Guía práctica del proceso de construcción, entrenamiento y validación del dataset

Importamos de librerías necesarias

Data Acquisition

Se asume que STEG realizó una integración final de las fuentes sugeridas para la realización de este dataset.
Cargamos los archivos de cliente y facturación que son nuestra fuente de datos.

Verificamos como esta compuesto el dataset de clientes.

Verificamos como esta compuesto el dataset de facturas

Data Comprehension

Generación de Reportes (Univariante y Multivariante)

Histogramas de Cliente

Histogramas de Facturación

Observaciones y siguientes pasos

Observaciones

Utilizando los reportes generados se identifica información valiosa de forma univariante y multivariante como columnas con:

Siguientes Pasos
Dada la relación entre los dos datasets: cliente que contiene el encabezado de la información y la facturación que contiene el detalle de características que ayudan a determinar si un cliente tiene un comportamiento fraudlento. Para ésto se deben integrar relacionalmente para crear y adaptar el dataset etiquetado para un Aprendizaje Supervisado.

Seguidamente se procede a un trabajo de procesado de datos para crear un dataset con alta capacidad predictiva utilizandoun enfoque boosting que incluye:

Data Preparation (Pre-procesado de datos)

Definición de Funciones Utilitarias

En esta sección tendremos las funciones utilitarias a utilizar para la manipulación de los datasets, orientados al Feature Engineering y Data Cleaning. Ejecutan los procesos técnicos con sus respectivos funciones:

Data Clean

Preparación Inicial del dataset

Se realiza la estrategia indicada en el documento para iniciar con el análisis:

Data Balancing

Se observa desbalanceo de datos en las etiquetas de fraude y no fraude.

Se aplica Random Undersampling manual utilizando las muestras generadas por el método "sample" y el conteo de la minoría (Fraude).

Observamos balanceo las clases en el nuevo dataset.

Imputación de Nulos

Dataset Cliente

Verificamos si nuestro dataset de clientes tiene valores nulos

Dataset Facturación

Verificamos si nuestro dataset de facturas tiene valores nulos

Imputamos columnas con nulos reemplazandolos con la media en el dataset de facturas

Observamos cambios realizados

Imputación de Ceros

Dataset Cliente

Verificamos si nuestro dataset de facturas tiene valores iguales a cero

Imputamos columnas con ceros reemplazandolos con la media en el dataset de clientes

Dataset Facturación

Seleccionamos las columnas que pueden imputarse para ser reemplazadas por la media

Observamos cambios realizados

Nota: Hay valores categóricos o potenciales que sean ceros.

Agregación de data del Cliente y Facturación.

En este punto, vamos a juntar ambos datasets que hemos ido trabajando por separado. Se hara una relación de cliente con la facturación.

Ahora tenemos un unico dataset para ser procesado.

Feature Engineering

Feature Creation

A este punto, generamos nuevas columnas con maximos y minimos de las medias obtenidas. Ver Funciones

Feature Elimination

Eliminamos aquellas columnas que ya no necesitamos

Observamos el reporte generado con el nuevo dataset creado.

Mayor análisis puede partir de este dataset.

Data Training

Separamos los features de los targets para la utilización de entrenamiento y validación.

Funcion para ejecutar catboost con Kfold

Ejecución y resultados

Optimización con Pycaret

Ejecución del Optimizador (Pycaret)

Resultados de la comparación de modelos.

Si buscamos los mejores parametros, basados en el mejor algoritmo

Validación y Métricas

En esta parte podemos obtener los resultados generales del modelo, escogiendo en cada botón.

Mostramos la relacion entre verdaderos positivos y falsos positivos usando la curva ROC

Validación de resultados de Pycaret

Interpretación del modelo creado (Catboost)

Validación utilizando Random Forest (mismos pasos)