{"id":168438,"date":"2024-01-31T06:30:00","date_gmt":"2024-01-31T05:30:00","guid":{"rendered":"https:\/\/liora.io\/es\/?p=168438"},"modified":"2026-02-25T18:28:47","modified_gmt":"2026-02-25T17:28:47","slug":"isolation-forest","status":"publish","type":"post","link":"https:\/\/liora.io\/es\/isolation-forest","title":{"rendered":"Isolation Forest: \u00bfc\u00f3mo detectar anomal\u00edas en un conjunto de datos?"},"content":{"rendered":"\n<p><strong>Hoy echamos un vistazo a Isolation Forest, un algoritmo de Machine Learning dise\u00f1ado para resolver problemas de clasificaci\u00f3n binarios como la detecci\u00f3n de fraudes o el diagn\u00f3stico de enfermedades. Esta t\u00e9cnica, presentada en la 8.\u00aa Conferencia Internacional del IEEE en 2008, es la primera t\u00e9cnica de clasificaci\u00f3n dedicada a la detecci\u00f3n de anomal\u00edas basada en el aislamiento.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-el-problema-de-la-paradoja-de-la-precision\">El problema de la paradoja de la precisi\u00f3n<\/h2>\n\n\n\n<p>Cuando nos enfrentamos a un problema de clasificaci\u00f3n de clases en Machine Learning, a veces ocurre <a href=\"https:\/\/liora.io\/comment-gerer-les-problemes-de-classification-desequilibree-partie-i\">que el conjunto de datos est\u00e1 desequilibrado<\/a>. M\u00e1s concretamente, existe una proporci\u00f3n mucho mayor de una clase que de otra dentro de la muestra de entrenamiento. Este problema es una caracter\u00edstica frecuente de los problemas de clasificaci\u00f3n binarios. A primera vista, se podr\u00eda pensar en aplicar un algoritmo de clasificaci\u00f3n cl\u00e1sico, como los <strong>\u00e1rboles de decisi\u00f3n<\/strong>, los <a href=\"https:\/\/liora.io\/es\/que-es-el-algoritmo-knn\">K-NN<\/a> o <a href=\"https:\/\/liora.io\/svm\">SVM<\/a> presentados en nuestro blog. Sin embargo, en realidad, estos algoritmos son incapaces de manejar estos conjuntos de datos at\u00edpicos en los que hay un gran n\u00famero de disparidades entre clases. Tienden a maximizar por medio de su funci\u00f3n de p\u00e9rdida de cantidades como <b>accuracy<\/b>, pero sin tener en cuenta la distribuci\u00f3n de los datos.<\/p>\n\n\n\n<p>En la pr\u00e1ctica, esto puede verse en modelos que, cuando se entrenan en un <strong>conjunto de datos<\/strong> dominado por una clase, reportar\u00e1n durante la fase de evaluaci\u00f3n un alto \u00edndice de predicciones correctas, conocido como \u201c<strong>accuracy<\/strong>\u201d, pero no ser\u00e1n relevantes en la pr\u00e1ctica.<\/p>\n\n\n\n<p>Veamos un ejemplo para ilustrar esta paradoja. En el caso de un problema de <b>detecci\u00f3n de fraudes bancarios<\/b>: un banco intenta determinar entre un gran n\u00famero de transacciones cu\u00e1les son fraudulentas, bas\u00e1ndose en una serie de variables explicativas. Estas transacciones fraudulentas representan alrededor del 11 % de las transacciones de nuestro conjunto de datos. La clasificaci\u00f3n mediante un modelo sencillo como SVM <a href=\"https:\/\/liora.io\/es\/scikit-learn-decubre-la-biblioteca-python\">utilizando Scikit-Learn<\/a> da, por ejemplo, la siguiente puntuaci\u00f3n:<\/p>\n\n\n\n<div style=\"text-align: center\"><pre>Puntuaci\u00f3n sobre el conjunto de prueba 0,8985<\/pre><\/div>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-text-align-left\">Sin embargo, si echamos un vistazo a la matriz de confusi\u00f3n, r\u00e1pidamente nos damos cuenta de que el comportamiento del algoritmo es bastante ingenuo:<\/p>\n\n\n\n<div>\n  <table style=\"width:100%;border-collapse: collapse;border: 1px solid #ddd\">\n    <thead>\n      <tr style=\"background-color: #ff6745;color: #efefef\">\n        <th style=\"border: 1px solid #ddd;padding: 8px\">Clase prevista<\/th>\n        <th style=\"border: 1px solid #ddd;padding: 8px\">0<\/th>\n        <th style=\"border: 1px solid #ddd;padding: 8px\">1<\/th>\n      <\/tr>\n    <\/thead>\n    <tbody>\n\n      <tr>\n        <td style=\"border: 1px solid #ddd;padding: 8px\"><strong>Clase real<\/strong><\/td>\n        <td style=\"border: 1px solid #ddd;padding: 8px\">&nbsp;<\/td>\n        <td style=\"border: 1px solid #ddd;padding: 8px\">&nbsp;<\/td>\n      <\/tr>\n\n      <tr>\n        <td style=\"border: 1px solid #ddd;padding: 8px\"><strong>0<\/strong><\/td>\n        <td style=\"border: 1px solid #ddd;padding: 8px\">1772<\/td>\n        <td style=\"border: 1px solid #ddd;padding: 8px\">9<\/td>\n      <\/tr>\n\n      <tr>\n        <td style=\"border: 1px solid #ddd;padding: 8px\"><strong>1<\/strong><\/td>\n        <td style=\"border: 1px solid #ddd;padding: 8px\">194<\/td>\n        <td style=\"border: 1px solid #ddd;padding: 8px\">25<\/td>\n      <\/tr>\n\n    <\/tbody>\n  <\/table>\n<\/div>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>De 219 transacciones fraudulentas, solo 25 fueron identificadas como fraudulentas por nuestro modelo. Esto demuestra que el poder predictivo del modelo no es tan potente como podr\u00eda sugerir la precisi\u00f3n. Se trata de una m\u00e9trica demasiado sesgada por un desequilibrio de clases, un fen\u00f3meno conocido como la <a href=\"https:\/\/towardsdatascience.com\/accuracy-paradox-897a69e2dd9b\">paradoja de la precisi\u00f3n<\/a>.<\/p>\n\n\n\n<p><em>Un modelo con una puntuaci\u00f3n de precisi\u00f3n m\u00e1s alta puede tener un poder de predicci\u00f3n menor que un modelo con una precisi\u00f3n m\u00e1s baja.<\/em><\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/es\/nuestros-cursos-de-data\">Aprender a corregir la paradoja de la precisi\u00f3n<\/a><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-que-es-el-isolation-forest\">\u00bfQu\u00e9 es el Isolation Forest?<\/h2>\n\n\n\n<p>\u00bfC\u00f3mo afrontar este problema que arruina los esfuerzos de varios algoritmos cl\u00e1sicos bien entrenados? Existen varias soluciones, como por ejemplo los m\u00e9todos de remuestreo, como el <b>submuestreo<\/b> o el <b>sobremuestreo<\/b>, que seleccionan aleatoriamente datos para equilibrar la proporci\u00f3n de clases. Sin embargo, cuando estos m\u00e9todos no son suficientemente eficaces, es habitual replantearse el problema y considerar la detecci\u00f3n de anomal\u00edas como un problema de <a href=\"https:\/\/liora.io\/apprentissage-non-supervise\">clasificaci\u00f3n no supervisada<\/a>. Aqu\u00ed es donde entra en juego el tan esperado Bosque de Aislamiento.<\/p>\n\n\n\n<p>En Isolation Forest, encontramos Isolation porque es una t\u00e9cnica de detecci\u00f3n de anomal\u00edas que identifica <b>directamente<\/b> las anomal\u00edas (com\u00fanmente conocidas como \u00ab<b>outliers<\/b>\u00ab), a diferencia de las t\u00e9cnicas habituales que discriminan los puntos con respecto a un perfil general \u201cnormalizado\u201d.<\/p>\n\n\n\n<p>El principio de este algoritmo es muy sencillo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se selecciona una <b>variable<\/b> (feature) de forma <b>aleatoria<\/b>.<\/li>\n\n\n\n<li>A continuaci\u00f3n, el conjunto de datos se divide aleatoriamente en funci\u00f3n de esta variable para obtener <b>dos<\/b> subconjuntos de datos.<\/li>\n\n\n\n<li>Las dos etapas anteriores se repiten hasta <b>aislar<\/b> un dato.<\/li>\n\n\n\n<li>Los pasos anteriores se repiten <b>recursivamente<\/b>.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2024\/01\/python_anomaly_detection_isolation_forest.gif\" alt=\"\" \/><figcaption class=\"wp-element-caption\">Funcionamiento del algoritmo<\/figcaption><\/figure>\n\n\n\n<p>Al igual que los algoritmos de ensamblado como <a href=\"https:\/\/liora.io\/es\/random-forest-bosque-aleatorio-definicion-y-funcionamiento\">Random Forest<\/a>, creamos un bosque (de ah\u00ed el nombre de Isolation Forest) formado por decenas o cientos de \u00e1rboles cuyos resultados <b>combinamos<\/b> para obtener un resultado mejor.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2024\/01\/z8olQRY0Nc9JS4lj0c0V7lWFxz9zhihuOLDX6YmrbxOktSHag3A2eXu-BNYOAD6_7yxtJUeL1vBtSOgX6TDy_LLcZCQF_4l9d8ZQQfgrABMjb2E1CAECCcvsF9PnSa6nY-1.jpg\" alt=\"\" \/><figcaption class=\"wp-element-caption\">Ilustraci\u00f3n del Isolation Forest<\/figcaption><\/figure>\n\n\n\n<p>Entonces, \u00bfc\u00f3mo se obtiene el resultado en un \u00e1rbol? <b>En otras palabras, \u00bfc\u00f3mo se define si un punto es una anomal\u00eda o no? <\/b>La construcci\u00f3n del algoritmo da lugar a una estructura de \u00e1rbol, cuyos nudos son los conjuntos particionados durante las etapas del algoritmo y cuyas hojas son los puntos aislados. Intuitivamente, las anomal\u00edas tender\u00e1n a ser las hojas <b>m\u00e1s cercanas a la ra\u00edz del \u00e1rbol<\/b>.<\/p>\n\n\n\n<p>En funci\u00f3n de la distancia a la ra\u00edz<b>, se asigna una puntuaci\u00f3n de anomal\u00eda a cada hoja de un \u00e1rbol<\/b>, y esta puntuaci\u00f3n de anomal\u00eda se <b>promedia<\/b> sobre todos los \u00e1rboles que se han construido de forma recursiva, para obtener un resultado final. En funci\u00f3n de la situaci\u00f3n, pueden <b>ajustarse par\u00e1metros<\/b> como el n\u00famero de \u00e1rboles o la proporci\u00f3n de anomal\u00edas que hay que considerar para obtener un <b>resultado m\u00e1s s\u00f3lido<\/b>.<\/p>\n\n\n\n<p>El Isolation Forest es muy apreciado por su capacidad para <b>detectar anomal\u00edas de forma no supervisada<\/b>, y a la vez obtener resultados satisfactorios en numerosos \u00e1mbitos. Entre sus aplicaciones figuran el fraude bancario, el diagn\u00f3stico m\u00e9dico y el an\u00e1lisis de fallos estructurales.<\/p>\n\n\n\n<p>Si quieres saber m\u00e1s, echa un vistazo a nuestros cursos de <a href=\"https:\/\/liora.io\/es\/formacion-data-scientist\">Data Scientist<\/a>, <a href=\"https:\/\/liora.io\/es\/formacion-data-analyst\">Data Analyst<\/a> y <a href=\"https:\/\/liora.io\/es\/formacion-data-engineer\">Data Engineer<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-a89b3969 wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/es\/nuestros-cursos-de-data\">Descubre nuestros cursos especializados en Data<\/a><\/div>\n<\/div>\n\n\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"El problema de la paradoja de la precisi\u00f3n\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"En problemas de clasificaci\u00f3n binaria con conjuntos de datos desequilibrados (ej. fraude bancario ~11%), algoritmos cl\u00e1sicos (\u00e1rboles decisi\u00f3n, K-NN, SVM) maximizan accuracy sin considerar distribuci\u00f3n de datos. Resultan modelos con alta accuracy pero bajo poder predictivo (ej. SVM detect\u00f3 solo 25 de 219 fraudes reales). Esto es la 'paradoja de la precisi\u00f3n': un modelo con mayor accuracy puede tener menor poder predictivo que uno con menor accuracy.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfQu\u00e9 es el Isolation Forest?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Isolation Forest es una t\u00e9cnica de detecci\u00f3n de anomal\u00edas (presentada en IEEE 2008) que identifica directamente outliers, a diferencia de m\u00e9todos que discriminan respecto a un perfil 'normalizado'. Principio: selecciona variable aleatoria, particiona datos seg\u00fan ella, repite hasta aislar un dato, repite recursivamente. Crea un bosque de \u00e1rboles (como Random Forest) y promedia puntuaciones de anomal\u00eda seg\u00fan distancia a la ra\u00edz (anomal\u00edas m\u00e1s cercanas a ra\u00edz). Par\u00e1metros ajustables: n\u00famero \u00e1rboles, proporci\u00f3n anomal\u00edas. Aplicaciones: fraude bancario, diagn\u00f3stico m\u00e9dico, an\u00e1lisis fallos estructurales.\"\n      }\n    }\n  ]\n}\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Hoy echamos un vistazo a Isolation Forest, un algoritmo de Machine Learning dise\u00f1ado para resolver problemas de clasificaci\u00f3n binarios como la detecci\u00f3n de fraudes o el diagn\u00f3stico de enfermedades. Esta t\u00e9cnica, presentada en la 8.\u00aa Conferencia Internacional del IEEE en 2008, es la primera t\u00e9cnica de clasificaci\u00f3n dedicada a la detecci\u00f3n de anomal\u00edas basada en [&hellip;]<\/p>\n","protected":false},"author":82,"featured_media":183739,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2440],"class_list":["post-168438","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-ia"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/168438","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/users\/82"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/comments?post=168438"}],"version-history":[{"count":4,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/168438\/revisions"}],"predecessor-version":[{"id":184296,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/168438\/revisions\/184296"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/media\/183739"}],"wp:attachment":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/media?parent=168438"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/categories?post=168438"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}