top of page
Writer's pictureAriel Sanchez Rojas

Modelo de predicción de Evasión de Impuestos: Support Vector, Random Forest and Gradient Boosting

Updated: Jul 6


Las primeras aproximaciones historiográficas, respecto a la evasión de impuestos, comienzan desde 1972 con el paper “Income Tax Evasion: A Theoretical Analysis” escrito por Allingham y Sandmo. En este paper los autores comienzan a aproximarse a cómo está formulada la declaración de impuestos y que la decisión de declarar es una bajo incertidumbre. Siendo así, indican que el contribuyente tiene dos opciones entre dos estrategias: (i) declarar legítimamente su ingreso anual; (ii) declarar menos de lo que verdaderamente gana; siendo la última una decisión que tomará si considera que será o no investigado por las autoridades tributarias. De tal manera, con esta primera aproximación podemos concluir que la tasa de evasión tiene una correlación negativa respecto a la probabilidad de detección y la sanción. Este hipotético de declaración bajo incertidumbre de los 70 lo reitera en el 2005 Avendaño indicando que bajo estas condiciones el contribuyente se ve tentado a reportar un ingreso gravable que no corresponde al valor real de su ingreso. Siendo así, formula que: (i) la decisión de cuánto ingreso reportar y si incurre en evasión dependerá de la probabilidad de ser detectado evadiendo “p”; (ii) de una una penalidad proporcional al monto del impuesto evadido “k”; y (iii) que el individuo, averso al riesgo, escogerá reportar “w” para maximizar la utilidad esperada.


Siguiendo esta primera aproximación, para 1983 Charles Clotfelter en: “Tax evasion and Tax rates: An analysis of Individual Returns” comenzó a utilizar modelos econométricos para encontrar la relación entre tipo impositivo y renta declarada. Para este caso, estudió 47.000 declaraciones fiscales y logró concluir que la evasión aumenta al hacerlo la renta disponible después de impuestos. Ahora bien, conjunto a estas dos aproximaciones, teóricas y econométricas, encontramos aproximaciones empíricas como encuestas a contribuyentes para entender sus actitudes ante la imposición y la evasión. En estas encuestas se concluye que a mayor probabilidad de ser sancionados menor será el nivel de evasión, como también que en los niveles superiores de renta es menor la propensión marginal a evadir. Por último, se han hecho enfoques experimentales como juegos de simulación a través de los cuales a los individuos participantes se les da al principio de cada periodo una cantidad de dinero para el cual deberán decidir qué cantidad de ese dinero declaran. Con este juego se concluye que el nivel de evasión será mayor en aquellos individuos a quienes se les dice que su tipo impositivo es superior a la media de los demás contribuyentes. 


Siguiendo este hilo argumentativo, otro escenarios sobre medición de la evasión de impuestos lo presentan Steiner y Soto en “Evasión de Impuestos a la Renta en Colombia: 1988-1995”. En este artículo los autores presentan distintas aproximaciones. Primero (1), “un método de identificación de brechas” a través del cual se compara el ingreso registrado en las cuentas nacionales con el ingreso reportado en las declaraciones de impuestos para así encontrar la brecha de ingresos evadidos. El segundo (2), es el “método de muestra selectiva” a través del cual se selecciona un grupo de contribuyentes, se compara la información presentada en las declaraciones con estadísticas obtenidas mediante auditorías. El tercero (3), es el “método del mercado laboral” a través del cual se comparan las tasas de participación laboral de acuerdo con las estadísticas oficiales con las mismas tasas obtenidas a partir de encuestas a empresas y trabajadores. El cuarto (4), es el “método del insumo físico” mediante el cual se supone una relación estable entre los insumos físicos empleados en la producción y el producto nacional (con base en esta relación se estima el tamaño de las actividades económicas específicas). 


Dicho esto, es preciso agregar que de estas aproximaciones, su mayoría, son un análisis del impuesto potencial a través del cual la evasión se determina de la base gravable y no del recaudo (teniendo en cuenta que tarifas y base imponible varían). Por lo tanto, el cálculo de la evasión total termina siendo un comparativo al valor agregado de las bases gravables potenciales de personas naturales y/o jurídicas con el agregado de las bases observadas. 


Análisis que la Administración Tributaria de Colombia utilizó en su última de estimación de evasión de impuestos en el 2015 para concluir que la evasión de impuestos de renta de personas jurídicas fue del 39% estimándolo en 15 billones de pesos colombianos, los cuales representan el 2,3% del PIB nacional. 


Siendo así, y una vez hecha esta breve aproximación historiográfica del siglo veinte podemos ver que los métodos de aproximación a la estimación de la evasión tributaria bien pueden ser: (i) directos, a través auditorías y encuestas; (ii) indirectos, mediante análisis del mercado laboral, el insumo físico, la brecha tributaria o las aproximaciones econométricas; y (iii), a través de aproximaciones experimentales (teoría de juegos), y culturales (análisis de múltiples causas). 


Llegados a este punto, e indicado las distintas metodologías de medio siglo podemos ver que todos los estudios se han enfocado en estudios a posteriori de la evasión, pero muy pocos se han enfocado en un modelo de predicción que los identifique a priori. Siendo así, en esta segunda parte quisiera tratar dos aproximaciones a modelos de predicción de evasión hechos en el 2015, y el 2018. 


En el primer artículo titulado “A logit model of informal traders’ decision to evade tax: a Case of Zimbabwe”, escrito por Nyamapfeni y Garikai, los autores se aproximan al problema a través del comercio informal y la evasión que este presenta. Sus variables predictoras son: (i) Edad, (ii) Estado Civil, (iii) Sexo, (iv) Nivel educativo, (v) Inflación, (vi) Nivel de regulación, (vii) Ingreso, (viii) Religión, (ix) Raza, (x) frecuencia de cruzar la frontera, y presentan un modelo de regresión logística (Logit), para la estimación de los datos recolectados, de la siguiente forma: 


Ante esta forma funcional presentan un modelo específico de la siguiente manera: 

Para la variable de evasión indican que es un binaria por lo que será cero (0) si no evaden y uno (1) si evaden. Para la edad es continua siendo cuadrática cuando sea una edad mayor. Las demás variables predictoras son dummy. Bien, la aproximación a los datos que utilizan es a través de encuestas hecho a 250 comerciantes informales de los cuales terminan eliminando la variable sexo, religión y tarifa debido a que no son significativas. Al final concluyen que: “(...) results indicated that male are less compliant than females, and also the young were less likely to evade tax as compared to middle aged and old age. The most educated have also been found to be evading more, disregarding the fact that education level is positively related to compliance level. Regular travellers have also been found to be evading more. The variable religion has been found to be insignificant, implying that it does not affect the decision to evade tax.” 


Una segunda aproximación a la predicción de evasión de impuestos es hecha en el 2018 por Sandeep Kumar K para graduarse del Indian Institute of Technology de la maestría de Computer Science an Engineering. Para esta investigación el autor utilizó un modelo de regresión logística (Logit) que predice si una empresa es un potencial deudora/evasora de impuestos indirectos (IVA); de tal manera, creó el modelo analizando el historial del comportamiento sobre si declara o no, el volumen del negocio, el valor de las transacciones con otras firmas y la media de la desviación estándar del valor de la Ley de Benford en las transacciones de dicha empresa. Este análisis para detectar qué empresas están coludiendo a través de transacciones, y la generación de facturas falsas. Detección que logra a través de un análisis no supervisado al crear unos clusters para así congregar a los evasores. 


Siendo así, Kumar crea una red de las firmas a través de nodos (cada nodo representa una firma), y cada nodo lo organiza a través del “weight” de cada uno; siendo este el promedio del impuesto pagado por mes de la firma de julio a diciembre del 2017. A su vez, colocó un “weighted directed edge” de una firma a la otra en la cual el peso de cada borde es la cantidad de ventas que la una hace con la otra del 2016 al 2017. De tal manera, genera estas interacciones para entender el flujo de información en interacción entre las firmas. Vemos entonces una exactitud en el modelo de prueba del 86.33%, y una precisión del 85.5%, que pone a prueba con un ejercicio en el cual cuatro comerciantes están haciendo “circular trading” entre ellos.


Siendo este el escenario presentado, el proyecto que quisiera presentar es un modelo de predicción de evasión de impuestos a través de un Random Forest mediante el cual, analizando distintas variables predictoras se pueda predecir cuándo una persona evadirá impuestos. De tal manera, con este proyecto, se busca dar avances en la literatura nacional debido a que todos los modelos creados fueron estimaciones mas no predicciones.



Los datos sobre la evasión de impuestos son escasos pues para estos es necesario organizarlos como datos diseñados mediante los cuales los distintos entrevistados respondan distintas preguntas. Una encuesta aplicable podría ser si paga la totalidad de los impuestos que debería pagar o si no, pero la probabilidad de que mientan es alto por lo que el error en los datos sería elevado por lo que es importante un proceso minucioso de minería de datos. Ahora bien, como bien vimos en Colombia hay distintos estudios de estimación en evasión pero no hay efectos previos por lo que conseguir datos de evasión no fue posible. Ante esta razón decidí utilizar las bases de datos de Kaggle en la cual se encuentran distintos datos útiles para aproximarse a un modelo de predicción de evasión de impuestos; a pesar de que sean datos sintéticos. 


Para el análisis de datos exploratorio comenzaré con ¿qué tipos de transacciones son fraudulentas? En este escenario encontramos dos tipos de transacciones: (i) por transferencia directa, y (ii) por transferencia con intermediario. Las variables a utilizar son: (i) monto, (ii) balance original, (iii) nuevo balance después de la transacción, (iv) balance de cuenta destino previo a la transacción, (v) nuevo balance destino. Estas variables son importantes debido a que nos permite ver el panorama del que hace la transacción, y el panorama del que recibe la transacción. 


Las partes a analizar son: (i) directamente con el defraudador, y (ii) el intermediario que es el comerciante que le da dinero al defraudador. A su vez, tendremos dos marcadores: (i) qué transacciones se marcan como fraudulentas, y (ii) qué transacciones son fraudulentas. Acá es importante aclarar que cuando es posible un fraude en la transacción este se detiene para no dejar que se complete la transacción. De tal manera, los balances de las cuentas no cambiarán debido a que no se logró hacer la transferencia. Asimismo, se descarta variable de posible fraude puesto que no es explicativa de cuándo hay un fraude ya que sólo se marca 16 veces con respecto a las transacciones. 


Bien, como se verá los datos están desbalanceados en las transacciones. Lo común es que haya más transacciones no fraudulentas que fraudulentas. De tal manera, se requiere un algoritmo de boosting ya que el dataframe estará desbalanceado y una aproximación que permita balancear el data frame, como oversampling hará que el modelo sea sensible a overfitting. 


Ahora. Las transacciones fraudulentas son 8.213, mientras que las no fraudulentas son 2.762.196. Por lo tanto, vemos que el dataset está desbalanceado ya que hay muchas transacciones no fraudulentas, a diferencia de las fraudulentas. Por lo tanto, lo que pasará es que al entrenar el modelo y hacer un MSE o alguna otra medición del error se dará un modelo bueno pues tendrá buena predicción de transacciones no fraudulentas. Y, en la mayoría de los casos, no permitirá ver qué transacciones son fraudulentas. Siendo este el escenario, lo que se hace es que, aleatoriamente, se seleccionan más muestras de fraudulentas para que se compare con no fraudulentas. En este caso se hace un muestreo aleatorio de las transacciones fraudulentas, con reemplazo hasta obtener un número de transacciones fraudulentas igual al de no fraudulentas. 


Dicho esto, el debate recae en la importancia de que quede muy bien clasificado lo que tiene fraude a pesar de se esté clasificando mal lo que no tiene fraude; o si tiene un buen modelo a pesar de que se pierdan algunos de los que tienen fraude. Siendo así, se decide clasificar muy bien los que tienen fraude. Por lo tanto, la aproximación a tomar será de sobremuestreo. Para esto, aleatoriamente se escogerá hasta que tenga el mismo número de los que tienen fraude y los que no. 


Arrojados estos datos, la proporción será que las transacciones fraudulentas representan un 0.3% del total de las transacciones lo cual justifica utilizar un método de sobremuestreo dado que se considerará más peligroso dejar pasar a alguien con fraude, que imputar el fraude a alguien que no lo tiene.



Como bien aclaramos en la descripción de datos, en este dataset se utiliza el sobremuestreo para balancear. Así, nos beneficiamos del uso del gradient-boosting classifier por el hecho de que este algoritmo es robusto con respecto al overfitting lo cual es una de las consecuencias de utilizar el sobremuestreo para así balancear las muestras. 


Ahora bien, en random forest classifier los dos parámetros que vamos a tener varían para probar modelos con un método de cross-validation de tamaño 10 que es el número de estimadores, la máxima profundidad y el mínimo de muestras que producen la división. Esto, para obtener un balance entre la complejidad del modelo en un número de muestras consideradas para tomar decisiones, y el número de divisiones que va a ser el algoritmo. 


Bien, el data frame original tiene 6.362.620 registros de los cuales únicamente nos interesan los tipos de transacciones de transferencia y transferencia con comerciante como intermediario dado que estas son las únicas que podrán marcarse como fraudulentas. Luego de filtrar por estos dos tipos de transacciones entonces se obtiene un total de 2.770.409 registros. 


En cuanto al random forest classifier, para este algoritmo se varía el número de estimadores como control de la complejidad del modelo. En este caso el máximo de la profundidad y el mínimo de número de muestras que se requiere para la demostración nos permitirá establecer el overfitting del algoritmo. Cabe aclarar que el cross validation se utilizará debido a que tenemos pocos datos en la muestra. 



Importar los modulos a usar 

In [25]: import pandas as pd 

import numpy as np 

%matplotlib inline 

import matplotlib.pyplot as plt 

import matplotlib.lines as mlines 

from mpl_toolkits.mplot3d import Axes3D 

import seaborn as sns 

from sklearn.model_selection import train_test_split, learning_curve, Gr idSearchCV 

from sklearn.metrics import average_precision_score, confusion_matrix from sklearn.ensemble import GradientBoostingClassifier, RandomForestCla ssifier 

from sklearn.svm import SVC, LinearSVC 

from sklearn.decomposition import PCA 

from sklearn.preprocessing import MinMaxScaler 

Se carga el dataset y se asignannombres a las columnas

localhost:8889/nbconvert/html/Downloads/PF. ML. Predicción de Impuestos.ipynb?download=false 6/12 

21/7/2019 PF. ML. Predicción de Impuestos 

In [2]: df = pd.read_csv('PS_20174392719_1491204439457_log.csv') df = df.rename(columns={'oldbalanceOrg':'oldBalanceOrig', 'newbalanceOri g':'newBalanceOrig', \ 

 'oldbalanceDest':'oldBalanceDest', 'newbalanceDe st':'newBalanceDest'}) 

df.head() 

Out[2]: 

step type amount nameOrig oldBalanceOrig newBalanceOrig nameDest oldB 0 1 PAYMENT 9839.64 C1231006815 170136.0 160296.36 M1979787155 1 1 PAYMENT 1864.28 C1666544295 21249.0 19384.72 M2044282225 2 1 TRANSFER 181.00 C1305486145 181.0 0.00 C553264065 3 1 CASH_OUT 181.00 C840083671 181.0 0.00 C38997010 4 1 PAYMENT 11668.14 C2048537720 41554.0 29885.86 M1230701703 

Se seleccionan solo los tipos de transaccion que presentan posibilidad de fraude, que en el caso de los datos sinteticos de se trata de TRANSFER y de CASH_OUT, de acuerdo con el modelo PaySim 

In [3]: df_work = df[df['type'].isin(['TRANSFER', 'CASH_OUT'])].copy() 

In [4]: df_work.shape 

Out[4]: (2770409, 11) 


Se observa que el dataset se encuentra bastante desbalanceado, debido a que el comun de las personas tiende a no realizar transacciones fraudulentas, por lo cual un model de machine que se base en los datos dara un excelente resultado de clasificacion de acuerdo a sus metricas. Con una tasa de 0.3 % de transacciones fraudulentas, en el peor de los casos, un clasificador que clasifique todas las transacciones como no fraudulentas tendra una precision media de clasificacion del 99.7 % 

In [5]: print('El numero de operaciones fraudulentas es: {}'.format(df_work['isF raud'].sum())) 

print('El numero de operaciones no fraudulentas es: {}'.format(df_work.s hape[0] - df_work['isFraud'].sum())) 

print('La proporcion es de : {}'.format(df_work['isFraud'].sum()/(df_wor k.shape[0] - df_work['isFraud'].sum()))) 

El número de operaciones fraudulentas es: 8213 

El número de operaciones no fraudulentas es: 2762196 

La proporción es de : 0.0029733588782258754

Se utiliza una aproximación de oversampling y undersampling. El oversampling por sí solo incrementa la probabilidad de overfitting, mientras que el undersampling produce pérdida de información. Se hace un balance entre los dos al considerar que es más grave no detectar una operación fraudulenta que bloquear una transaccion asi no sea fraudulenta 


In [6]: df_nofraud = df_work[df_work['isFraud'] == 0].sample(df_work['isFraud']. sum()*2, replace=True

df_fraud = df_work[df_work['isFraud'] == 1].sample(df_nofraud.shape[0], replace=True

In [7]: df_balanced = df_fraud.append(df_nofraud) 

Se hace una segmentación de los predictores y la variable dependiente, teniendo 5 parametros para el modelo 

In [8]: X = df_balanced[['amount', 'oldBalanceOrig', 'newBalanceOrig', 'oldBalan ceDest', 'newBalanceDest']] 

Y = df_balanced['isFraud'


Para una convergencia más rapida de los modelos es conveniente reescalar los datos, de tal forma que estos se encuentren entre 0 y 1, ocupando ademas el mismo intervalo. En adicion a esto se hace una transformacion de PCA, la cual asegura que se variables independientes para hacer los procesos de clasificacion. Si bien PCA tambien permite reducir la dimensionalidad de los datos, en este caso particular sólo se manejan 5 variables, por lo cual no se considera necesario 

In [9]: sca = MinMaxScaler() 

sca.fit(X) 

Xs = sca.transform(X) 

pca = PCA() 

pca.fit(Xs) 

Xp = pca.transform(Xs) 

La dimensión de las observaciones usadas para la predicción es 

In [11]: Xp.shape 

Out[11]: (32852, 5)


Support Vector Classifier 

En primer lugar se hace uso del algoritmo de SVC con un kernel lineal, el cual escala linealmente con los datos. En este caso se variará el parámetro de regularización C en un intervalo equiespaciado logarítmicamente, tomando una validación cruzada con un tamaño de muestra de 10% con métrica de precisión media de clasificación como medida de desempeño 


In [14]: svc = LinearSVC() 

params = {'C': [0.01, 0.1, 1, 10, 1000, 10000, 100000]} 

cvc = GridSearchCV(svc, params, cv=10, n_jobs=-1

cvc.fit(Xp, Y) 

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\svm\base.py:931: Con vergenceWarning: Liblinear failed to converge, increase the number of i terations. 

 "the number of iterations.", ConvergenceWarning) 

Out[14]: GridSearchCV(cv=10, error_score='raise-deprecating',  estimator=LinearSVC(C=1.0, class_weight=None, dual=True, fit_int ercept=True, 

 intercept_scaling=1, loss='squared_hinge', max_iter=1000,  multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,  verbose=0), 

 fit_params=None, iid='warn', n_jobs=-1, 

 param_grid={'C': [0.01, 0.1, 1, 10, 1000, 10000, 100000]},  pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',  scoring=None, verbose=0) 

La precisión media de clasificación está dada por 

In [15]: cvc.best_score_ 

Out[15]: 0.8544989650554 

Mientras que el mejor parámetro de regularización esÑ 

In [38]: cvc.best_params_ 

Out[38]: {'C': 1000}

La matriz de regularización está dada por: 

In [31]: y_pred_svc = cvc.predict(Xp) 

conf_svc = confusion_matrix(Y, y_pred_svc) 

En la componente 1,1 de la matriz se observa la cantidad de verdaderos negativos, los cuales comprenden 46% de las predicciones, mientras que la componente 1,2 corresponde a los falsos positivos, los cuales comprenden 3.6% de los casos, de forma similar la componente 2,1 de la matriz corresponde a los falsos negativos, siendo el 7.3% de los casos, finalmente 43% de los valores son clasificados como verdaderos positivos. Este clasificador tiene un desempeño pobre en cuanto a que se deja pasar una gran cantidad de casos fraudulentos, los cuales podrían significar una gran pérdida monetaria 

localhost:8889/nbconvert/html/Downloads/PF. ML. Predicción de Impuestos.ipynb?download=false 9/12 

21/7/2019 PF. ML. Predicción de Impuestos 

In [32]: conf_svc 

Out[32]: array([[15227, 1199], 

 [ 2405, 14021]], dtype=int64) 

Random Forest Classifier 

En segundo lugar se hace la aproximación de RFC, la cual puede ser un poco más compleja que SVC, dependiendo del número de estimadores y de la profundidad de los árboles de decisión. Igual que en el caso anterior se usa la validación cruzada con métrica de precisión métrica de clasificación como parámetro de desempeño. En este caso se hacen variaciones sobre el número de estimadores y la profundidad máxima del arbol 

In [17]: rfc = RandomForestClassifier() 

params = {'n_estimators': [10, 100, 1000, 10000], 'max_depth': [10, 100, 1000, None]} 

cfc = GridSearchCV(rfc, params, cv=10, n_jobs=-1

cfc.fit(Xp, Y) 

Out[17]: GridSearchCV(cv=10, error_score='raise-deprecating', 

 estimator=RandomForestClassifier(bootstrap=True, class_weight=No ne, criterion='gini', 

 max_depth=None, max_features='auto', max_leaf_nodes=None,  min_impurity_decrease=0.0, min_impurity_split=None,  min_samples_leaf=1, min_samples_split=2, 

 min_weight_fraction_leaf=0.0, n_estimators='warn', n_jobs=N one, 

 oob_score=False, random_state=None, verbose=0, 

 warm_start=False), 

 fit_params=None, iid='warn', n_jobs=-1, 

 param_grid={'n_estimators': [10, 100, 1000, 10000], 'max_depth': [10, 100, 1000, None]}, 

 pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',  scoring=None, verbose=0) 

La mejor precisión media de estimación está dada por: 

In [18]: cfc.best_score_ 

Out[18]: 0.9881590161938391 

Mientras que los mejores parámetros del modelo vienen dados por: 

In [40]: cfc.best_params_ 

Out[40]: {'max_depth': 1000, 'n_estimators': 1000}

La matriz de confusión viene dada por: 


In [33]: y_pred_rfc = cfc.predict(Xp) 

conf_rfc = confusion_matrix(Y, y_pred_rfc) 

Se tiene que con este modelo todos los datos de entrenamiento se encuentran bien clasificados. La precisión media de clasificación puede ser inferior al 100% si en alguna de las segmentaciones de validación cruzada se llega a un modelo que no haga clasificación perfecta. Esto indica que hay incidencia de overfitting en el proceso 

In [34]: conf_rfc 

Out[34]: array([[16426, 0], 

 [ 0, 16426]], dtype=int64) 


Gradient Boosting Classifier 

Finalmente se usa una aproximación de GBC, en la cual se hace gradient boosting sobre un algoritmo de random forest. En este caso se conserva el tamaño de la muestra del 10% y se varía la tasa de aprendizaje y la profundidad máxima de los árboles 

In [20]: gbc = GradientBoostingClassifier() 

params = {'learning_rate': [0.01, 0.1, 1, 10, 100, 1000], 'max_depth': [ 10, 100, 1000, None]} 

cbc = GridSearchCV(gbc, params, cv=10, n_jobs=-1

cbc.fit(Xp, Y) 

Out[20]: GridSearchCV(cv=10, error_score='raise-deprecating', 

 estimator=GradientBoostingClassifier(criterion='friedman_mse', i nit=None, 

 learning_rate=0.1, loss='deviance', max_depth=3, 

 max_features=None, max_leaf_nodes=None, 

 min_impurity_decrease=0.0, min_impurity_split=None,  min_samples_leaf=1, min_sampl... subsample=1.0, tol= 0.0001, validation_fraction=0.1, 

 verbose=0, warm_start=False), 

 fit_params=None, iid='warn', n_jobs=-1, 

 param_grid={'learning_rate': [0.01, 0.1, 1, 10, 100, 1000], 'max _depth': [10, 100, 1000, None]}, 

 pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',  scoring=None, verbose=0) 

Se observa que el resultado obtenido es exactamente igual al obtenido en el Random Forest Classifier, lo cual muestra que se llegó al óptimo ofrecido por el algoritmo 

In [21]: cbc.best_score_ 

Out[21]: 0.9881590161938391 

In [41]: cbc.best_params_ 

Out[41]: {'learning_rate': 0.1, 'max_depth': 10}


In [36]: y_pred_gbc = cbc.predict(Xp) 

conf_gbc = confusion_matrix(Y, y_pred_gbc) 

In [37]: conf_gbc 

Out[37]: array([[16425, 1], 

 [ 0, 16426]], dtype=int64) 


Para hacer estimaciones futuras se guardan los modelos estimados en archivos pickle que pueden volver a ser cargados al espacio de trabajo para realizar más pruebas 

In [23]: import pickle 

from sklearn.externals import joblib 

In [24]: joblib.dump(cvc, 'cvc.pkl'

joblib.dump(cfc, 'cfc.pkl'

joblib.dump(cbc, 'cbc.pkl'

Out[24]: ['cbc.pkl']


Conclusiones 

Con un algoritmo de random forest classification se obtuvo una estimación aproximadamente igual a la del modelo de PaySim de simulación de transacciones. Esto indica que en un escenario de detección de transacciones fraudulentas en los cuales se secuestran las cuentas de los clientes (caso PaySim), es posible detectarlas confiablemente con un modelo de random forest. En el caso concreto de evasión de impuestos es posible extrapolar el modelo si se considera que una empresa puede ser usada en la evasión de impuestos por medio del estudio de sus interacciones con terceros y sus ganancias. 


Por ejemplo, si se analiza el patrimonio y los pasivos de una empresa, se puede tener un estado de cuenta en cuanto a que esto corresponde al balance de las empresas en un periodo anual (en el caso colombiano). Esto puede ser comparado con operaciones de transferencias (examinando distintos tipos de compras, ventas y negocios con terceros) con terceros, los cuales reporten sus transacciones con la compañía examinada que impliquen ingresos y egresos, teniendo una estructura de los datos similar a la del caso PaySim. 


1 view0 comments

Comments


bottom of page