Estás leyendo la publicación: Conozca a los ganadores del “Desafío de aprendizaje automático” de Deloitte y MachineHack
Los préstamos incobrables son una amenaza que debilita nuestro sistema financiero. En un intento por resolver el problema de los morosos, Deloitte se asoció con MachineHack para organizar un hackatón para científicos de datos y profesionales del aprendizaje automático llamado “Desafío de aprendizaje automático” de 29 de noviembre al 13 de diciembre de 2021. El hackatón se centró en varios atributos, como la cantidad financiada, la ubicación, el préstamo, el saldo, etc., para predecir si una persona será morosa o no.
Se han declarado los ganadores de este hackatón, que se llevarán a casa premios en efectivo por valor de hasta INR 1 lakh. Conozcamos a estos 5 ganadores principales de la tabla de clasificación y sus métodos para triunfar en el hackatón.
Rango 01: Chandrashekhar
Chandrashekhar ha sido coronado ganador del hackatón de Deloitte. Uno de sus profesores lo animó a seguir una carrera en ciencia de datos después de que Chandrashekhar se graduara en tecnología de la información. Siempre fue una persona matemática y vio una estrecha relación entre la ciencia de datos y las matemáticas. Así que siguió un curso de seis meses en ciencia de datos, que cambió su percepción de los datos.
Acercarse
Chandrashekhar dice que se centró más en la ingeniería de funciones para ganar esta competencia. Decidió generar más funciones en lugar de desarrollar modelos. Extrajo varias características de las variables existentes y generó agrupaciones, PCA y características aritméticas de las columnas numéricas y características combinadas usando columnas categóricas.
Chandrashekhar agrega: “He generado funciones de agregación entre las columnas categóricas y numéricas. Luego, usé Optuna para ajustar el modelo (lgbm) y extraje funciones útiles usando lgbm feature_importance. Finalmente, construí stratified_cv fold para predecir sus resultados y usé el mismo método para Catboost y Gradientboost. Luego, el ensamblaje de los tres modelos dio la mejor solución”.
Chandrashekhar llama una buena experiencia participar en el hackathon. Siente que ha estado participando en los hackatones de MachineHack, mejorando sus fundamentos. Él dice: “Creo firmemente que MachineHack está proporcionando una gran plataforma para los aspirantes a la ciencia de datos. Esta plataforma lleva a cabo hackatones sobre una variedad de problemas y conocí a algunas personas geniales a través de MachineHack”.
Mira la solución aquí.
Puesto 02: Felipe Carneiro Wanderley
Felipe se graduó en Ingeniería de Producción. Actualmente, trabaja como analista de ofertas en una empresa gubernamental llamada IBGE. Sin embargo, han pasado alrededor de nueve meses desde que comenzó a estudiar aprendizaje automático. Así que buscó un área que uniera la programación y las estadísticas y encontró que la ciencia de datos encajaba perfectamente.
Acercarse
Felipe dice que invirtió la mayor parte de su tiempo en el preprocesamiento de los datos, especialmente en la ingeniería de funciones. Se diseñaron tres variables (Lote Inscrito, Grado y Título del Préstamo), cuatro codificadas usando el codificador de etiquetas (Sub Grado, Duración del Empleo, Estado de Verificación y Estado de la Lista Inicial), y cuatro excluidas (ID, Tipo de Solicitud, Cuentas Morosas y Plan de Pago) .
Agrega: “Para las funciones diseñadas, utilicé una codificación ordinal calculando el porcentaje de morosos para cada clase y ordenándolos. Traté de usar la codificación de destino, pero el modelo se sobreajustó y la métrica de pérdida de registro para la validación empeoró. La codificación One Hot tampoco brindó buenos resultados para el modelo”.
En cuanto al preprocesamiento, dado que el modelo que utilizó era un modelo basado en árboles, no fue necesario utilizar la normalización/estandarización de los datos. Sin embargo, el objetivo está desequilibrado, por lo que fue necesario utilizar un sobremuestreo SMOTE. La estrategia de muestreo elegida fue 0,11.
Dice que antes de usar el SMOTE, la media de la probabilidad que traía su modelo era entre 9,5 y 10,5. Sin embargo, a partir de los comentarios proporcionados por la tabla de clasificación pública, utilizando la métrica Log Loss y la media de su presentación, pudo calcular la media de la tabla de clasificación pública. La media calculada fue de 11,3~12,0.
Y agrega: “Para probar mi teoría, me presenté para lograr la pérdida Dumb-Log, utilizando solo el valor que supuse que era la proporción de morosos del préstamo, es decir, 0.1167. Antes de enviar, calculé la pérdida de registro de una presentación que solo contenía el valor de 0,1167 y obtuve 0,3603. Esta solución (Sub 9) me trajo un Log Loss de 0.36024, lo que confirma mi teoría”.
Como la media de su solución se desplazó un poco, decidió usar la estrategia SMOTE Sampling_strategy de 0,11 que cambió la media de su envío al rango adecuado. Además, utilizó un modelo basado en árboles tal que la presencia de multicolinealidad tiende a 0.
Usó diferentes algoritmos como Random Forest Classifier, KneighborsClassifier, Logistic Regression, XGB Classifier, Voting Classifier con estas combinaciones, etc. El que mejores resultados produjo fue Random Forest Classifier. Después de enviar la línea de base de RandomForest, utilizó GridSearch para elegir los mejores parámetros.
Wanderley agrega: “Para la evaluación del modelo, utilicé la validación cruzada con cinco pliegues. Además, utilicé una canalización para poder agregar ambos transformadores, SMOTE y Random Forest Classifier”.
Su primer contacto con MachineHack fue a través de un curso de ciencia de datos en Brasil. El objetivo era participar en un hackathon de este tipo y alcanzar las 100 primeras posiciones en la tabla de clasificación. Eligió el concurso “Predicción de los precios de la vivienda en Bangalore” y obtuvo el cuarto lugar.
Mira la solución aquí.
Rango 03: Tapas Das
Tapas trabaja actualmente como gerente de entrega en The Math Company. Es un entusiasta del aprendizaje automático/profundo y se interesó por primera vez en esta área temática en 2018. Pasó por diferentes MOOC, como el curso Andrew Ng ML y el curso de especialización en aprendizaje profundo en Coursera. También pasó una cantidad significativa de tiempo aprendiendo los conceptos básicos de programación de Python y luego comenzó a elegir diversos tipos de proyectos de varias fuentes en línea como Kaggle, HackerEarth, Driven Data y poco a poco se fue acostumbrando a la mentalidad analítica y el enfoque de ciencia de datos.
Acercarse
Comenzó con EDA básico para explorar el conjunto de datos y modificó la distribución de datos para algunas variables continuas (cantidad financiada por el inversor, tasa de interés, propiedad de la vivienda, etc.) y categóricas (título del préstamo). A continuación, usó Label Encoder para codificar las variables categóricas y usó la biblioteca Feature Tools para generar 200 nuevas funciones.
Agrega: “Finalmente, utilicé un conjunto promedio ponderado de modelos LightGBM, CatBoost y XGBoost para generar las predicciones finales. Además, utilicé la librería de Optuna para la búsqueda de hiperparámetros para los diferentes modelos.”
Tapas lleva ya un tiempo participando en diferentes hackatones de la plataforma MachineHack. Él dice: “Me encanta cómo los diferentes problemas imitan los escenarios del mundo real, lo que ayuda a una comprensión más profunda de ese dominio. Además, es divertido competir con las mentes más brillantes en el área de la ciencia de datos. Realmente saca lo mejor de mí”.
Mira la solución aquí.
Rango 04: Vivek Kumar
Kumar dice que se vuelve rápido si no está explorando cosas nuevas. Le gusta la ciencia de datos porque le permite explorar, iterar y aprender de diferentes problemas y experimentos, tal como aprendemos los seres humanos. Agregó: “Cuando comencé a aprender, me di cuenta de que las habilidades de la ciencia de datos se podían aplicar a muchas áreas de dominio diferentes, por lo que comencé a progresar de manera lenta y constante tomando diferentes cursos de capacitación y participando en diferentes hackatones”.
Acercarse
El modelo de Kumar constaba de pasos técnicos y un enfoque en la comprensión del proceso comercial y la comprensión de los datos antes de pasar a los pasos de preparación, modelado y evaluación de datos.
En términos de análisis de datos, hubo 67463 filas y 35 características (26 numéricas y nueve categóricas) en los datos de entrenamiento. No se encuentran entradas faltantes ni duplicadas para datos de entrenamiento y prueba. La distribución de datos de capacitación y prueba para la mayoría de las funciones fue similar, excepto para el saldo rotativo, la tarifa de recuperación de cobro, las cuentas en mora, el monto total de cobro y el saldo actual total. Las funciones basadas en la recopilación y la recuperación han mostrado una relación positiva con el resultado objetivo.
Análisis de datos objetivo
La variable objetivo (Estado del préstamo) estaba muy desequilibrada.
Análisis de valores perdidos
No se encontraron valores faltantes en los conjuntos de datos de tren y prueba.
Transformación
Se aplicó la transformación de registro para todas las características numéricas. Los modelos basados en árboles como XGBoost no eran sensibles a las transformaciones monotónicas, pero las transformaciones de registro para todas las funciones numéricas ayudaron a mejorar la validación cruzada y la puntuación de la tabla de clasificación.
Ingeniería de funciones
Se generaron nuevas características basadas en la interacción de algunas de las características. Kumar realizó una verificación de distribución de Entrenamiento/Prueba para cada una de las nuevas funciones. Solo las características que muestran una distribución similar en los datos del tren y de la prueba se han incluido para el entrenamiento del modelo para evitar cualquier desviación de la predicción. Esto le permitió restringir la lista de características.
- Calculó la suma de ‘Recuperaciones’ y ‘Tarifa de recuperación de cobranza’.
- Calculó la suma del ‘Monto total de cobro’ y el ‘Cargo total recibido por pago atrasado’.
- Categoría de tasa de interés creada basada en ‘Tasa de interés’.
Codificación categórica
Kumar también realizó la codificación de frecuencia para las características categóricas. Se realizó dentro del ciclo de validación cruzada durante el entrenamiento y la validación del modelo para evitar la fuga de datos.
Enfoque de capacitación y validación de modelos
Kumar eligió el algoritmo de aumento de gradiente como un conjunto final de algoritmos porque funciona mejor para identificar relaciones no lineales entre entidades.
- El entrenamiento/validación puntual se realizó para 12 algoritmos de máquina (es decir, una combinación de un conjunto de algoritmos lineales y no lineales). Esto lo ayudó a comprender qué tipos de modelos pueden descubrir el patrón para hacer predicciones. El paquete Pycaret proporciona una manera muy buena y fácil de realizar esta actividad.
- Según las pruebas puntuales realizadas en el primer paso, se utilizó el modelo XGBoost como modelo final para el entrenamiento, la evaluación y la predicción.
- El modelo ha sido entrenado/evaluado en base a diferentes datos divididos de entrenamiento/validación basados en una técnica de validación cruzada de cinco veces. De esta manera, me aseguré de que el conjunto de datos de entrenamiento original se usara tanto para el entrenamiento como para la validación, lo que ayudó a mejorar la solidez del modelo debido a la diversidad de división de datos de entrenamiento/validación.
- Las predicciones de prueba se generan en cada uno de los cinco pliegues y luego se promedian para generar predicciones de prueba finales.
- La variación de la puntuación de validación local basada en la validación cruzada puede mostrar una tendencia similar en la puntuación de la tabla de clasificación. Esto lo ayudó a construir una estrategia de validación sólida y le permitió experimentar con diferentes aspectos de la construcción del modelo, como la validación de nuevas funciones, nuevas técnicas de codificación, ajuste de hiperparámetros, etc. El puntaje de validación cruzada es comparable con la tabla de clasificación.
- Métrica de pérdida Out of the Fold Log: 0.30822
- Pérdida de registro de clasificación pública: 0.35350
- Pérdida de registro de clasificación privada: 0.34099
Para el ajuste de hiperparámetros se utilizó el paquete Optuna.
Kumar dijo: “Podemos ver que las funciones Importe del préstamo y Tarifa de recuperación de cobro han recibido la puntuación de importancia más alta entre todas las funciones, ya que XGBoost las ha utilizado muchas veces para la división. Sería injusto tomar una decisión comercial basada en la importancia de la función XGBoost en comparación con otras técnicas disponibles bien establecidas que se utilizan para la interpretación del modelo, como SHAP. Esto se basa en la teoría de juegos respaldada por una sólida base matemática para justificar la lógica detrás de la importancia global de las características.
FORMA
Kumar agregó que el valor absoluto medio de los valores SHAP para cada función se toma para obtener un diagrama de barras estándar.
La biblioteca SHAP proporciona formas sencillas de agregar y trazar los valores de Shapely para un conjunto de puntos (en nuestro caso, el conjunto de validación) para tener una explicación global del modelo.
La nueva característica generada en base a la suma del monto de cobro y el cargo por pago atrasado recibido ha recibido la puntuación de importancia más alta entre todas las características. Cuanto mayor sea el valor de Collection_amt_plus_received_late_fee, más impacto tendrá en el incumplimiento del préstamo, lo cual es intuitivo.
En términos de su experiencia con MachineHack, Kumar dijo que el equipo es un gran apoyo. Él dice: “Me sentí bastante satisfecho al resolver algunos de los problemas desafiantes que enfrenta la industria, y MachineHack lo hizo posible al traer esos problemas a una plataforma donde diferentes piratas informáticos compiten para resolverlos. Gracias, MachineHack”.
Mira la solución aquí.
Rango 05: Rahul Pednekar
A Pednekar siempre le han apasionado las nuevas tecnologías, especialmente la ciencia de datos, la IA y el aprendizaje automático. Su experiencia radica en la creación de visualizaciones de datos para contar la historia de sus datos y el uso de la ingeniería de funciones para agregar nuevas funciones para dar un toque humano en el mundo de los algoritmos de aprendizaje automático. Además, está muy interesado en desarrollar software que resuelva problemas del mundo real aprovechando los datos para tomar decisiones eficientes al predecir el futuro.
Utiliza mucho Python para limpiar, analizar y realizar aprendizaje automático en datos y tiene más de 19 años de experiencia laboral en TI, gestión de proyectos, desarrollo de software, soporte de aplicaciones, diseño de sistemas de software y estudio de requisitos.
Acercarse
Comenzó con la eliminación de valores atípicos y mantuvo solo aquellas filas en los datos de capacitación donde: “Tarifa de recuperación de cobro” < 55, "Saldo actual total" < 1000000 y "Tarifa total recibida por retraso" < 40.
Para la conversión de tipos de datos, convirtió las siguientes columnas de tipos de datos numéricos en tipos de datos de objetos como si fueran columnas categóricas:
- Término
- Delincuencia – dos años
- Consultas – seis meses
- Registro Público
- Cuenta abierta
- Cuentas totales
- Pago de la semana pasada
Luego, convirtió la columna Objetivo “Estado del préstamo” del tipo de datos de objeto a un tipo de datos numérico.
Algunas filas del conjunto de datos de prueba no estaban presentes en el conjunto de datos de entrenamiento. Por lo tanto, los reemplazó con valores que están presentes en los conjuntos de datos de entrenamiento y prueba.
- Nombre de la columna = “Término”: Reemplazar “60” con “59”
- Nombre de la columna = “Delincuencia – dos años”: Reemplazar “9” con “8”
- Nombre de la columna = “Cuentas totales”: Reemplazar “73” con “72”
La columna “Título del préstamo” contiene muchos valores duplicados. Esta columna se limpia usando el siguiente método. Las 16 categorías finales de la columna “Título del préstamo” se formaron a partir de varias categorías diferentes combinándolas en una de las 16 categorías.
- Personal_Loan: Todo tipo de préstamos personales
- Vacation_Loan: cualquier préstamo tomado para vacaciones
- Home_Loan: cualquier préstamo se toma para comprar una casa nueva o renovar la casa existente
- Medical_Loan: Préstamo tomado con fines médicos
- Debt_Consolidation_Loan: el préstamo se toma para consolidar la deuda existente
- Consolidation_Loan: Todos los tipos de préstamos de consolidación
- Credit_Card_Consolidation: Todos los tipos de préstamos de consolidación de tarjetas de crédito
- Debt_Free: El préstamo se toma para quedar libre de deudas.
- CREDIT_CARDS: Préstamo tomado sobre tarjetas de crédito
- REFI_LOAN: El préstamo se toma para refinanciar préstamos existentes
- Other_Loans: todos los demás tipos de préstamos
- CAR_LOAN: Préstamo tomado para la tarjeta
- Compra importante: Préstamo tomado para compras importantes
- Negocios: cualquier tipo de préstamos comerciales
- Mudanza y reubicación: se toma un préstamo para mudanza y reubicación
- Otro: Cualquier otro tipo de préstamo
Luego, se crea una nueva columna, “Tipo de préstamo”, con las 16 categorías anteriores. Finalmente, eliminó cuatro columnas (ID, Plan de Pago, Título del Préstamo y Cuentas Morosas) ya que no agregaban ningún valor.
Modelado y Predicción
Para ello, Pednekar utilizó:
- One Hot Encoding: use la función get_dummies() para formar alrededor de 400 columnas para el modelado final.
- RandomizedSearchCV para encontrar los mejores hiperparámetros usando RandomForest Regressor
- Prediga los datos de prueba utilizando el mejor modelo proporcionado por el regresor RandomForest sintonizado con hiperparámetro anterior.
En términos de su experiencia en MachineHack, Pednekar dice: “Me gustaría agradecer a MachineHack por brindarme la oportunidad de participar en el Desafío de aprendizaje automático de Deloitte. Ha sido una maravillosa experiencia de aprendizaje y me gustaría participar en futuros hackatones. Los alentaría a organizar muchos más hackatones”.
Mira la solución aquí.