Código completo: https://github.com/Emmimal/neuro-symbolic-xai-fraud/
El momento en que el problema se volvió real
Una tarde estaba depurando un sistema de detección de fraude y quería entender por qué el modelo había marcado una transacción específica. Llamé a KernelExplainer, pasé mi conjunto de datos en segundo plano y esperé. Tres segundos después tenía un gráfico de barras con atribuciones de funciones. Lo ejecuté nuevamente para verificar un valor y obtuve números ligeramente diferentes.
Fue entonces cuando me di cuenta de que había una limitación estructural en la forma en que se generaban las explicaciones. El modelo era determinista. La explicación no fue así. Estaba explicando una decisión consistente con un método inconsistente, y ni la latencia ni la aleatoriedad eran aceptables si alguna vez tuviera que ejecutarse en tiempo real.
Este artículo trata sobre lo que construí, lo que costó en rendimiento y lo que hice bien, incluido un resultado que me sorprendió.
Si las explicaciones no se pueden producir de manera instantánea y consistente, no se pueden utilizar en sistemas de fraude en tiempo real.
Información clave: la explicabilidad no debería ser un paso de posprocesamiento. Debería ser parte de la arquitectura del modelo.
Limitaciones de SHAP en configuraciones en tiempo real
Para ser precisos sobre lo que realmente hace SHAP: el marco SHAP de Lundberg y Lee[2]calcula los valores de Shapley (un concepto de la teoría de juegos cooperativos[3]) que atribuyen la salida de un modelo a sus características de entrada. KernelExplainer, la variante independiente del modelo, aproxima estos valores mediante una regresión lineal ponderada sobre una coalición de características muestreadas. El conjunto de datos de fondo actúa como línea de base y nsamples controla cuántas coaliciones se evalúan por predicción.
Esta aproximación es extremadamente útil para la depuración de modelos, la selección de características y el análisis post hoc.
La limitación examinada aquí es más estrecha pero crítica: cuando las explicaciones deben generarse en el momento de la inferencia, adjuntas a predicciones individuales, bajo restricciones de latencia en tiempo real.
Cuando adjunta SHAP a una canalización de fraude en tiempo real, está ejecutando un algoritmo de aproximación que:
Depende de un conjunto de datos en segundo plano que debe mantener y pasar en el momento de la inferencia. Produce resultados que cambian según las muestras y el estado aleatorio. Toma 30 ms por muestra en una configuración reducida.
El siguiente cuadro muestra cómo se ve ese resultado post-hoc: una clasificación global de características calculada después de que ya se haya realizado la predicción.
En el punto de referencia que ejecuté en el conjunto de datos de tarjetas de crédito de Kaggle[1], el propio SHAP imprimió una advertencia:
El uso de 200 muestras de datos en segundo plano podría provocar tiempos de ejecución más lentos. Considere usar shap.sample(data, K) o shap.kmeans(data, K) para resumir el fondo como K muestras.
Esto resalta la compensación entre el tamaño del fondo y el costo computacional en SHAP. 30 ms con 200 muestras de fondo es el límite inferior. Los antecedentes más grandes, que mejoran la estabilidad de la atribución, aumentan el costo.
El modelo neurosimbólico que construí requiere 0,898 ms para la predicción y explicación juntas. No hay piso de qué preocuparse porque no hay un explicador separado.
El conjunto de datos
Todos los experimentos utilizan el conjunto de datos de detección de fraude con tarjetas de crédito de Kaggle.[1], que cubre 284.807 transacciones reales con tarjetas de crédito realizadas por titulares de tarjetas europeos en septiembre de 2013, de las cuales 492 son fraudes confirmados.
Forma: (284807, 31) Tasa de fraude: 0,1727% Muestras de fraude: 492 Muestras legítimas: 284.315
Las características V1 a V28 son componentes principales transformados por PCA. Las características originales son anónimas y no se revelan en el conjunto de datos. El monto es el valor de la transacción. Se perdió el tiempo.
La cantidad se escaló con StandardScaler. Apliqué SMOTE[4]exclusivamente al conjunto de entrenamiento para abordar el desequilibrio de clases. El conjunto de pruebas se llevó a cabo con una distribución de fraude del 0,17 % en el mundo real.
Tamaño del tren después de SMOTE: 454.902 Tasa de fraude después de SMOTE: 50,00% Conjunto de pruebas: 56.962 muestras | 98 fraudes confirmados
La estructura del conjunto de pruebas es importante: 98 casos de fraude de 56.962 muestras es la condición operativa real de este problema. Cualquier modelo que obtenga una buena puntuación aquí lo hará en una tarea realmente difícil.
Dos modelos, una comparación
La línea de base: red neuronal estándar
La línea de base es un MLP de cuatro capas con normalización por lotes.[5]y abandono[6], una arquitectura estándar para la detección de fraude tabular.
clase FraudNN(nn.Module): def __init__(self, input_dim): super().__init__() self.net = nn.Sequential( nn.Linear(input_dim, 128), nn.BatchNorm1d(128), nn.ReLU(), nn.Dropout(0.3), nn.Linear(128, 64), nn.BatchNorm1d(64), nn.ReLU(), nn.Dropout(0.3), nn.Linear(64, 32), nn.ReLU(), nn.Linear(32, 1), nn.Sigmoid(), )
Hace una predicción y nada más. Explicar esa predicción requiere una llamada SHAP por separado.
El modelo neurosimbólico: explicación como arquitectura
El modelo neurosimbólico tiene tres componentes que trabajan juntos: una columna vertebral neuronal, una capa de reglas simbólicas y una capa de fusión que combina ambas señales.
La columna vertebral neuronal aprende representaciones latentes de las 29 características. La capa de reglas simbólicas ejecuta seis reglas diferenciables en paralelo, cada una de las cuales calcula una activación suave entre cero y uno utilizando una función sigmoidea. La capa de fusión toma ambas salidas y produce la probabilidad final.
clase NeuroSymbolicFraudDetector(nn.Module): """ Entrada |— Neural Backbone (representaciones de fraude latente) |— Capa de reglas simbólicas (6 reglas diferenciables) | Capa de fusión –> P(fraude) + rule_activations """ def __init__(self, input_dim, feature_names): super().__init__() self.backbone = nn.Sequential( nn.Linear(input_dim, 64), nn.BatchNorm1d(64), nn.ReLU(), nn.Dropout(0.2), nn.Linear(64, 32), nn.BatchNorm1d(32), nn.ReLU(), ) self.symbolic = SymbolicRuleLayer(feature_names) self.fusion = nn.Sequential( nn.Linear(32 + 1, 16), nn.ReLU(), # 32 de la red troncal + 1 de la capa simbólica (resumen de activación de reglas ponderadas) nn.Linear(16, 1), nn.Sigmoid(), )
Las seis reglas simbólicas están ancladas a las características de la tarjeta de crédito con la señal de fraude publicada más fuerte [7, 8]: V14, V17, V12, V10, V4 y Monto.
RULE_NAMES = [ "HIGH_AMOUNT", # La cantidad excede el umbral "LOW_V17", # V17 por debajo del umbral "LOW_V14", # V14 por debajo del umbral (señal más fuerte) "LOW_V12", # V12 por debajo del umbral "HIGH_V10_NEG", # V10 muy negativo "LOW_V4", # V4 por debajo del umbral]
Cada umbral es un parámetro que se puede aprender, inicializado con un dominio previo y actualizado durante el entrenamiento mediante un descenso de gradiente. Esto significa que el modelo no sólo utiliza reglas. Aprende dónde trazar las líneas.
La explicación es un subproducto del pase hacia adelante. Cuando la capa simbólica evalúa las seis reglas, ya tiene todo lo que necesita para producir un desglose legible por humanos. Llamar a predict_with_explanation() devuelve la predicción, la confianza, qué reglas se activaron, los valores observados y los umbrales aprendidos, todo en un solo paso hacia adelante sin costo adicional.
Capacitación
Ambos modelos fueron entrenados durante 40 épocas usando Adam.[9]con caída de peso y un programador de ritmo de aprendizaje por pasos.
[Línea de base NN] Época 40/40 tren=0,0067 val=0,0263 [Neurosimbólico] Época 40/40 tren=0,0030 val=0,0099
El modelo neurosimbólico converge hacia una menor pérdida de validación. Ambas curvas son limpias y no hay signos de inestabilidad por parte de los componentes simbólicos.
Rendimiento en el conjunto de pruebas del mundo real
[Línea de base NN] soporte de puntuación f1 de recuperación de precisión Legítimo 0,9997 0,9989 0,9993 56864 Fraude 0,5685 0,8469 0,6803 98 ROC-AUC : 0,9737 Soporte de puntuación f1 de recuperación de precisión [neurosimbólico] Legítimo 0,9997 0,9988 0,9993 56864 Fraude 0,5425 0,8469 0,6614 98 ROC-AUC : 0,9688
La recuperación por fraude es idéntica: 0,8469 para ambos modelos. El modelo neurosimbólico detecta exactamente la misma proporción de casos de fraude que la línea de base de caja negra sin restricciones.
La diferencia de precisión (0,5425 frente a 0,5685) significa que el modelo neurosimbólico genera algunos falsos positivos más. Que esto sea aceptable depende de la relación de costos entre los falsos positivos y el fraude no detectado en su implementación específica. La brecha ROC-AUC (0,9688 frente a 0,9737) es pequeña.
La cuestión no es que el modelo neurosimbólico sea más preciso. Es que es comparativamente preciso y al mismo tiempo produce explicaciones que la línea de base no puede producir en absoluto.
Lo que realmente aprendió el modelo
Después de 40 épocas, los umbrales de las reglas simbólicas ya no son anteriores inicializados. La modelo los aprendió.
Peso del umbral aprendido de la regla ————————————————————– HIGH_AMOUNT Cantidad > -0,011 (escalado) 0,121 LOW_V17 V17 < -0,135 0,081 LOW_V14 V14 < -0,440 0,071 LOW_V12 V12 < -0,300 0,078 HIGH_V10_NEG V10 < -0,320 0,078 LOW_V4 V4 < -0,251 0,571
Los umbrales para V14, V17, V12 y V10 son consistentes con lo que la EDA publicada en este conjunto de datos ha identificado como las señales de fraude más fuertes [7, 8]. El modelo los encontró mediante descenso de gradiente, no mediante especificación manual.
Pero hay algo inusual en la columna de peso: LOW_V4 lleva 0,571 del peso simbólico total, mientras que las otras cinco reglas comparten el 0,429 restante. Una regla domina la capa simbólica por un amplio margen.
Este es el resultado que no esperaba y vale la pena ser directo sobre lo que significa. Los rule_weights pasan a través de un softmax durante el entrenamiento, lo que en principio evita que cualquier peso colapse en uno solo. Pero softmax no impone uniformidad. Simplemente se normaliza. Con suficiente señal de gradiente, una regla aún puede acumular la mayor parte del peso si la característica que cubre es fuertemente predictiva en toda la distribución del entrenamiento.
V4 es una señal de fraude conocida en este conjunto de datos[7], pero este nivel de dominio sugiere que la capa simbólica se está comportando más como una puerta de característica única que como un sistema de razonamiento de múltiples reglas durante la inferencia. Para las predicciones del modelo esto no es un problema, ya que la columna vertebral neuronal todavía hace el trabajo pesado en las representaciones latentes. Pero para explicarlo, significa que en muchas transacciones, la contribución de la capa simbólica está determinada en gran medida por una sola regla.
Volveré a lo que se debe hacer al respecto.
El punto de referencia
La pregunta central: ¿cuánto tiempo lleva producir una explicación? ¿Tiene el resultado las propiedades necesarias en la producción?
Ejecuté ambos métodos de explicación en 100 muestras de prueba.
Todas las mediciones de latencia se tomaron en la CPU (máquina Intel i7, PyTorch, sin aceleración de GPU).
SHAP (KernelExplainer, 200 muestras de fondo, nsamples=100) Total: 3,00 s por muestra: 30,0 ms Neurosimbólico (predicción_con_explanación, paso único hacia adelante) Total: 0,0898 s por muestra: 0,898 ms Aceleración: 33x
La diferencia de latencia es el titular, pero la diferencia de consistencia es igualmente importante en la práctica.
KernelExplainer de SHAP utiliza el muestreo Monte Carlo para aproximar los valores de Shapley[2]. Ejecútelo dos veces en la misma entrada y obtendrá números diferentes. La explicación cambia con el estado aleatorio. En un entorno regulado donde las decisiones deben ser auditables, una explicación estocástica es un inconveniente.
El modelo neurosimbólico produce siempre la misma explicación para la misma entrada. Las activaciones de reglas son una función determinista de las características de entrada y los pesos aprendidos. No hay nada que variar.
Leyendo una explicación real
Aquí está el resultado de predict_with_explanation() en la transacción del conjunto de prueba 840, un caso de fraude confirmado.
Predicción: FRAUDE Confianza: 100.0% Reglas activadas (4) – producidas DENTRO del pase hacia adelante: Valor de la regla Peso del umbral operacional ————————————————- LOW_V17 -0.553 < -0.135 0.081 LOW_V14 -0.582 < -0.440 0.071 LOW_V12 -0.350 < -0.300 0,078 ALTA_V10_NEG -0,446 < -0,320 0,078
Cuatro reglas disparadas simultáneamente. Cada línea le indica qué característica estuvo involucrada, el valor observado, el umbral aprendido que cruzó y el peso que tiene esa regla en la capa simbólica. Este resultado no fue reconstruido a partir de la predicción posterior al hecho. Se produjo en el mismo momento de la predicción, como parte del mismo cálculo.
Observe que LOW_V4 (la regla con el 57 % del peso simbólico) no se activó en esta transacción. Las cuatro reglas que se dispararon (V17, V14, V12, V10) tienen pesos relativamente modestos individualmente. El modelo aún predijo FRAUDE con un 100% de confianza, lo que significa que la columna vertebral neuronal tomó esta decisión. El papel de la capa simbólica aquí era identificar el patrón específico de cuatro valores anómalos de características V que se disparan juntos y presentarlo como una explicación legible.
En realidad, esta es una demostración útil de cómo interactúan los dos componentes. La columna vertebral neuronal produce la predicción. La capa simbólica produce la justificación. No siempre están perfectamente alineados y esa tensión es informativa.
La misma ejecución de referencia registra la frecuencia con la que se activa cada regla en transacciones predichas por fraude, producidas durante la inferencia sin ningún cálculo por separado. Debido a que la ventana de 100 muestras refleja la tasa de fraude del 0,17% en el mundo real, contiene muy pocas predicciones de fraude, por lo que las barras son delgadas. El patrón se vuelve más claro en todo el conjunto de pruebas, pero incluso aquí confirma que el mecanismo está funcionando.
La comparación completa
¿Qué se debe hacer de manera diferente?
El peso del V4 colapsa. El softmax sobre rule_weights no logró evitar que una regla acumulara el 57% del peso simbólico. La solución correcta es un término de regularización durante el entrenamiento que penaliza la concentración del peso. Por ejemplo, una penalización de entropía en la salida de softmax que recompensa activamente distribuciones más uniformes entre reglas. Sin esto, la capa simbólica puede degradarse hacia una puerta de característica única, lo que debilita el argumento de la interpretabilidad.
El umbral HIGH_AMOUNT. El umbral aprendido para Cantidad convergió a -0,011 (escalado), que efectivamente es cero, por lo que la regla se activa para casi cualquier transacción no trivialmente pequeña, lo que significa que contribuye con muy poca discriminación. Es probable que el problema sea una combinación de que la característica sea realmente menos predictiva en este conjunto de datos de lo que sugiere la intuición del dominio (las características V dominan en la literatura publicada [7, 8]) y la inicialización lleva el umbral a una región con poca información. Una inicialización de umbral limitada o una puerta aprendida que pueda suprimir reglas de baja utilidad manejarían esto de manera más limpia.
Ajuste del umbral de decisión. Ambos modelos fueron evaluados en un umbral de 0,5. En la práctica, el umbral correcto depende de la relación de costos entre los falsos positivos y el fraude no detectado en el contexto de la implementación. Esto es especialmente importante para el modelo neurosimbólico donde la precisión es ligeramente menor. Un cambio de umbral hacia 0,6 o 0,65 recuperaría la precisión a costa de cierta retirada. Esta compensación debe hacerse deliberadamente, no dejarse por defecto.
Donde encaja esto
Este es el quinto artículo de una serie sobre enfoques neurosimbólicos para la detección de fraude. El trabajo anterior cubre los fundamentos:
Este artículo añade una quinta dimensión: la propia arquitectura de explicabilidad. No sólo si el modelo puede explicarse, sino si la explicación puede producirse a la velocidad y coherencia que realmente requieren los sistemas de producción.
SHAP sigue siendo la herramienta adecuada para la depuración de modelos, la selección de funciones y el análisis exploratorio. Lo que este experimento muestra es que cuando la explicación debe ser parte de la decisión (registrada en tiempo real, auditable por transacción, disponible para los sistemas posteriores), la arquitectura tiene que cambiar. Los métodos post hoc son demasiado lentos e inconsistentes para esa función.
El enfoque neurosimbólico cambia una pequeña cantidad de precisión por una explicación que es determinista, inmediata y estructuralmente inseparable de la predicción misma. Si esa compensación vale la pena depende de su sistema. Los números están aquí para ayudarle a decidir.
Código: https://github.com/Emmimal/neuro-symbolic-xai-fraud/
Divulgación
Este artículo se basa en experimentos independientes que utilizan datos disponibles públicamente (conjunto de datos sobre fraude con tarjetas de crédito de Kaggle) y herramientas de código abierto. No se utilizaron conjuntos de datos propietarios, recursos de la empresa ni información confidencial. Los resultados y el código son completamente reproducibles como se describe y el repositorio de GitHub contiene la implementación completa. Los puntos de vista y conclusiones expresados aquí son míos y no representan a ningún empleador u organización.
Referencias
[1]Grupo de aprendizaje automático de la ULB. Detección de fraude con tarjetas de crédito. Kaggle, 2018. Disponible en: https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud (Conjunto de datos publicado bajo la licencia de base de datos abierta. Investigación original: Dal Pozzolo, A., Caelen, O., Johnson, RA y Bontempi, G., 2015.)
[2]Lundberg, SM y Lee, S.-I. (2017). Un enfoque unificado para interpretar las predicciones de los modelos. Avances en sistemas de procesamiento de información neuronal, 30. Disponible en: https://arxiv.org/abs/1705.07874
[3]Shapley, LS (1953). Un valor para juegos de n personas. En HW Kuhn y AW Tucker (Eds.), Contribuciones a la teoría de los juegos (Vol. 2, págs. 307–317). Prensa de la Universidad de Princeton. https://doi.org/10.1515/9781400881970-018
[4]Chawla, NV, Bowyer, KW, Hall, LO y Kegelmeyer, WP (2002). SMOTE: Técnica de sobremuestreo minoritario sintético. Revista de investigación en inteligencia artificial, 16, 321–357. Disponible en: https://arxiv.org/abs/1106.1813
[5]Ioffe, S. y Szegedy, C. (2015). Normalización de lotes: acelerar el entrenamiento profundo de la red al reducir el cambio de covariables interno. Actas de la 32ª Conferencia Internacional sobre Aprendizaje Automático (ICML). Disponible en: https://arxiv.org/abs/1502.03167
[6]Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I. y Salakhutdinov, R. (2014). Abandono: una forma sencilla de evitar el sobreajuste de las redes neuronales. Revista de investigación sobre aprendizaje automático, 15 (1), 1929–1958. Disponible en: https://jmlr.org/papers/v15/srivastava14a.html
[7]Dal Pozzolo, A., Caelen, O., Le Borgne, Y.-A., Waterschoot, S. y Bontempi, G. (2014). Lecciones aprendidas en la detección de fraudes con tarjetas de crédito desde la perspectiva de un profesional. Sistemas expertos con aplicaciones, 41(10), 4915–4928. https://doi.org/10.1016/j.eswa.2014.02.026
[8]Carcillo, F., Dal Pozzolo, A., Le Borgne, Y.-A., Caelen, O., Mazzer, Y. y Bontempi, G. (2018). SCARFF: un marco escalable para transmitir la detección de fraudes con tarjetas de crédito con Spark. Fusión de información, 41, 182-194. https://doi.org/10.1016/j.inffus.2017.09.005
[9]Kingma, DP y Ba, J. (2015). Adam: un método para la optimización estocástica. Actas de la Tercera Conferencia Internacional sobre Representaciones del Aprendizaje (ICLR). Disponible en: https://arxiv.org/abs/1412.6980