Muy buenas, me llamo Luis y aquí les traigo este tutorial.
Índice
A medida que nuestra vida y nuestras finanzas pasan del mundo físico al digital, la detección del fraude en tiempo real ocupará un lugar central
A diferencia de nuestros padres y abuelos, vivimos y respiramos en el mundo digital. Inicialmente, eran discusiones en foros en línea, luego chats y correos electrónicos, y ahora la mayor parte de nuestra vida y transacciones financieras se ejecutan en modo digital.
A medida que aumenta el riesgo, no es suficiente detectar el fraude después del evento. Imagine a alguien con poca información confidencial sobre los datos de su banco o tarjeta de crédito, capaz de ejecutar una transacción fraudulenta.
Los bancos y las compañías de seguros necesitan herramientas y técnicas para detectar fraudes en tiempo real para tomar las medidas adecuadas.
Nos humanos s perder el sentido de la interpretación y visualización a medida que avanzamos más allá del espacio tridimensional.
Hoy en día, una transacción financiera involucra cientos de parámetros como el monto de la transacción, las tendencias de transacciones pasadas, la ubicación GPS de la transacción, el tiempo de la transacción, el nombre del comerciante, etc.
Necesitamos considerar muchos parámetros para detectar una anomalía y fraude en tiempo real.
El algoritmo de bosque de aislamiento implementado en Scikit-Learn
puede ayudar a identificar los fraudes en tiempo real y evitar pérdidas financieras.
En este artículo, discutiré paso a paso el proceso de una transacción fraudulenta con aprendizaje automático.
Necesitamos importar los paquetes que vamos a utilizar. Usaremos "make_blobs"
para generar nuestros datos de prueba y mediremos la precisión del modelo de ajuste con precision_score
.
from sklearn.datasets import make_blobs from sklearn.metrics import accuracy_score from sklearn.ensemble import IsolationForest
En la vida real, basamos el modelo en millones y miles de millones de transacciones pasadas y cientos de parámetros.
En este artículo, consideraremos cien muestras y cuatro características para comprender el concepto central y el proceso.
X, y = make_blobs(n_samples=[4,96], centers=[[5,3,3,10],[9,3,6,11]], n_features=4, random_state=0, shuffle="True")
La matriz X
contiene valores de los cuatro parámetros para cien registros y almacena si se trata de un fraude o una transacción normal.
Usaremos 300
estimadores base (árboles) en el conjunto y 10 muestras del conjunto de datos para entrenar cada estimador base.
clf = IsolationForest(n_estimators=300,max_samples=10, random_state=0,max_features=4,contamination=0.1).fit(X)
Además, usaremos los cuatro valores de características (parámetro "max_feature"
) para el modelo. En los proyectos, con la ingeniería de características, se determina la importancia de cada parámetro y se determina la lista de características en las que se basará el modelo.
No discutiré los detalles de la ingeniería de funciones en este artículo y lo discutiré más adelante en otro artículo. los AislamientoBosque
el modelo se ajusta aún más con el conjunto de datos de muestra.
Establecemos el valor del parámetro “contaminación” en función de la proporción de anomalía en los datos históricos y los riesgos de anomalía faltante frente a falsas alarmas.
Digamos que la proporción de transacciones fraudulentas en el conjunto de datos históricos es del 0,05%
y es una transacción con una participación muy alta.
En tal escenario, nos gustaría establecer el valor de contaminación de 0,25
a 0,35
. Establecer el valor de contaminación de 5
a 7
veces la proporción de anomalías en los registros de datos históricos garantizará que ninguna de las transacciones no autorizadas se clasifique incorrectamente.
En caso de que haya menos en juego, es posible que nos perdamos el lujo de detectar algunas transacciones fraudulentas, pero reducir las falsas alarmas con un valor de contaminación más bajo.
En el siguiente código, equipado AislamientoBosque
el modelo predice si una transacción es un fraude o una transacción normal. IsolationForest
predice la anomalía como "-1"
y la transacción normal como "1"
.
En nuestro conjunto de datos de prueba de muestra, las transacciones fraudulentas se codifican como "0"
y las transacciones normales como "1"
.
y_pred=clf.predict(X) y_pred[y_pred == -1] = 0
Para comparar la precisión de la predicción del modelo con la clasificación real de los conjuntos de datos de muestra, clasificaremos la transacción de fraude predicha de "-1"
a "0"
.
Como ahora la transacción fraudulenta está etiquetada como "0"
en la muestra y el conjunto predicho, podemos comparar la precisión de la predicción del modelo directamente con la función precision_score
.
fraud_accuracy_prediction= round(accuracy_score(y,y_pred),2) print("The accuracy to detect fraud is accuracy %" .format (accuracy=fraud_accuracy_prediction*100))
Parece que el modelo identificó la transacción fraudulenta con un 93%
de precisión. Es posible que la precisión de la predicción del modelo no se vea lo suficientemente buena a primera vista, pero recuerde que hay más en juego, por lo que estamos de acuerdo con pocas falsas alarmas (falso positivo).
Estas falsas alarmas sacrifican la precisión de la predicción, pero es mejor ser ultraseguro que perder algunas transacciones fraudulentas.
Usaremos la matriz de confusión para profundizar en el predicciones.
from sklearn.metrics import confusion_matrix print(confusion_matrix(y, y_pred))
Del total de 100 transacciones en conjuntos de datos de muestra, el modelo podría identificar las cuatro transacciones de fraude verdadero.
El modelo etiquetó siete transacciones genuinas como fraude (falsa alarma) debido al parámetro de contaminación (factor de seguridad) de 0,1
en el modelo.
Hemos establecido el valor de contaminación más alto que la proporción real de la transacción de fraude en los datos históricos, ya que es mejor prevenir que lamentar en caso de que las apuestas sean más altas.
Hemos escrito una pequeña función para detectar si la nueva transacción es un fraude en tiempo real. Toma los valores de los parámetros de la nueva transacción en el modelo entrenado para detectar la autenticidad de la transacción.
def frauddetection(trans): transaction_type=(clf.predict([trans])) if transaction_type[0] < 0: print("Suspect fraud") else: print("Normal transaction") return
Se recopilan varios parámetros de transacción en el momento de la nueva transacción.
frauddetection([7,4,3,8]) frauddetection([10,4,5,11])
La autenticidad de la transacción se determina llamando a la función definida anteriormente con los parámetros de la transacción.
He simplificado algunas cosas como la cantidad de características en la transacción, la cantidad de transacciones históricas para ajustarse al modelo, ingeniería de características, etc. para explicar el concepto central.
Hemos visto cómo el algoritmo de bosque de aislamiento puede ayudar a detectar transacciones fraudulentas en tiempo real.
Los comentarios son bienvenidos. Gracias por leer este tutorial.
Añadir comentario