Algoritmos no supervisados – K-means (k-medios)
Hoy hablaremos de los Algoritmos no supervisados – K-means (k-medios) . Lo haremos utilizando la pandemia del COVID-19 en el que a los gobiernos del mundo los tomó por sorpresa. ¿ Cómo se enfrentan los países ante el COVID19 ?
por Juan I. Barrios *
Quise hacer este post, que es más de corte académico ( no es una evaluación) , para aplicar un par de métodos de Inteligencia Artificial que puedan «agrupar» los países de acuerdo a sus indicadores en unos pocos grupos, utilizando algoritmos NO supervisados, tales como:
a.) K-means ( El algoritmo K-means paso a paso)
b.) Algoritmo de agrupamiento jerárquico,
y poder sacar algunas conclusiones, sobre en que punto se encuentra Costa Rica comparativamente en el manejo de la Pandemia contra los otros países.
Los números que utilizo para hacer este post son los que produce el sitio: ourworldindata.org sobre los datos que recogen sitios como Johns Hopkins University y Worldometers.info.
He centrado mi análisis en el conjunto de las variables disponibles para todos los países en el mencionado sitio.
Las variables disponibles en el set de datos son la suma de las variables originales mas las variables transformadas. (total 37)
iso_code object continent object location object date datetime64[ns] total_cases float64 new_cases float64 total_deaths float64 new_deaths float64 total_cases_per_million float64 new_cases_per_million float64 total_deaths_per_million float64 new_deaths_per_million float64 new_tests float64 total_tests float64 total_tests_per_thousand float64 new_tests_per_thousand float64 new_tests_smoothed float64 new_tests_smoothed_per_thousand float64 tests_per_case float64 positive_rate float64 tests_units object stringency_index float64 population float64 population_density float64 median_age float64 aged_65_older float64 aged_70_older float64 gdp_per_capita float64 extreme_poverty float64 cardiovasc_death_rate float64 diabetes_prevalence float64 female_smokers float64 male_smokers float64 handwashing_facilities float64 hospital_beds_per_thousand float64 life_expectancy float64 fatality_rate float64 mortality_rate float64 total_test_per_million float64 new_tests_per_million float64 total_cases_2 float64 fatality_rate_2 float64
Estadística tradicional
Comencemos repasando como se hacía el análisis estadístico tradicional, con técnicas muy utilizadas en el pasado. ¿ Cual es la limitación ?, El ser humano, de forma tradicional analiza las cosas en dos dimensiones. Vamos a traer un ejemplo donde vamos a usar el total de casos de covid19 por cada país y el Indice de letalidad. Recordemos que el Indice de letalidad ( fatality rate) es el resultado de dividir el total de muertes entre el total de afectados por la enfermedad, multiplicado por 100 . Si tratamos de clasificar a los países , utilizando únicamente esas dos variables, incluso con sólo dos vamos a tener mucho trabajo. (ver gráfico siguiente )
Tratemos de analizar estas tendencias:
En algunos países, da la impresión, que lograron disminuir las muertes mientras aumentaban los casos (un gráfico en forma de X) en otros conforme aumentan los casos subían las muertes ( un gráfico en forma de ola ) y otros en los que lograron disminuir ambas variables (gráfico en forma de una C,) etcétera, Sin embargo para conocer ¿ Que países están perdiendo la guerra contra el COVID19 ? estaríamos haciendo un análisis donde estamos incluyendo las tendencias sin considerar las escalas y con apenas sólo dos variables.
Después de tratar de analizar el desempeño de los países ante la pandemia utilizando estas dos variables encontramos que la limitación de los métodos estadísticos tradicionales es grande y por tanto hay una dificultad para poder concluir algo.
Por esta razón, vamos a utilizar las técnicas de Machine Learning ( Inteligencia Artificial) . En este caso en particular usaremos un viejo conocido: el algoritmo Kmeans ( k-means o k-medios) que es paarte del los Algoritmos de Aprendizaje NO supervisado. En el esquema a continuación podemos ver dónde se ubican estos algoritmos.
Veamoslo en detalle:
– Algoritmo K-means (k-medias)
Algoritmos no supervisados – K-means (k-medios) se utiliza para AGRUPAR conjuntos de cosas.
Objetivo: “Dividir objetos en función de características desconocidas. Consideremos que la máquina las agrupará de una forma,a insospechada, que no es al azar, el algoritmo busca relaciones ocultas en los datos para formar los grupos y el ejercicio consiste en ver porque quedaron conformados de esa forma.
Hoy en día utilizamos K-means para :
- Segmentación del mercado (tipos de clientes, fidelización).
- Cuando buscamos unir puntos cercanos en un mapa.
- En técnicas de compresión de imágenes.
- Analizar y etiquetar nuevos datos.
- Para detectar comportamientos anormales.
También hay otros algoritmos de este tipo: Mean-Shift , y DBSCAN (agrupación por densidad) y la agrupación jerárquica.
La agrupación en clúster es una clasificación sin clases predefinidas. Es como dividir calcetines por colores cuando usted no sabe cuantos colores diferentes tiene.
Un excelente ejemplo de agrupamiento – son los marcadores en mapas web. Cuando estás buscando todos los restaurantes veganos alrededor, el motor de agrupación los agrupa para formar manchas con un número. De lo contrario, los navegadores no podrían seleccionar los muchos restaurantes veganos en una ciudad.
Las fotos de Apple y las de Google usan un agrupamiento más complejo. Si está buscando caras en las fotos para crear álbumes de sus amigos, es posible que su aplicación no sepa cuántos amigos tienes y cómo se ven, pero está tratando de encontrar las características faciales comunes. A ese otro tipo de agrupación le llamamos Agrupación típica.
Los algoritmos de agrupación ó en clúster intentarán encontrar objetos similares (según algunas características) y fusionarlos en un grupo. Los que tienen muchas características similares se unen en una clase.
En el caso del algoritmo K-means, usamos una herramienta que es la llamada «curva del codo» la cual nos orienta sobre el número «ideal» de grupos que debemos indicarle al algoritmo que utilice.
Veamos la curva del codo en nuestro caso: ( la forma del codo podría estar en un valor entre 3 y 4 grupos.)
Podríamos comenzar con un análisis preliminar
– El coeficiente de correlación lineal de Pearson:
Antes de aplicar Algoritmos no supervisados – K-means (k-medios) , hacemos un análisis de correlación entre las variables para conocer cuales están mas relacionadas unas con otras. El coeficiente de correlación de Pearson varía entre -1 y 1 cuando el coeficiente se acerca al 1 indica que la relación es mayor ya sea directa o inversamente proporcional, ya sea si se acerca a +1 o al -1 . Cuando el coeficiente tiende a 0 no hay relación. El gráfico de color (heatmap) favorece el análisis visual ya que aquellas variables con los colores mas claros están mas relacionadas y las más oscuras menos relacionadas. Los cruces de la misma variable contra si misma aparecen en color amarillo por razones obvias.
Con las variables mas representativas : total de casos, total de muertes y total de pruebas obtenemos una primera aproximación de los clúster o grupos. Acá tuve una limitación y es el hecho de que hay países que no reportaron muertes o pruebas en algunos días lo que invalida su clasificación (lo que llamamos valores: NaN)
Siempre vamos a tener la tendencia a decir que se agruparon porque tenían mas casos, o porque tenían mas cantidad de muertes, etc. cuando en realidad los algoritmos no supervisados «agrupan » las cosas de acuerdo a relaciones «ocultas» que uno a veces se limita a describir ,no a entender.
En el análisis estadístico tradicional, Nosotros agrupamos las cosas basados en una o dos variables (pacientes por sexo, pacientes por edad, pacientes que sufren de una determinada enfermedad, etc.) en este caso se agrupan considerando TODAS las variables a la vez.
a.) Analisis con el algoritmo K-means
como lo mencionamos dentro de los Algoritmos no supervisados – se encuentra K-means (k-medios) , con realidad es un método de agrupamiento, que tiene como objetivo agrupar un conjunto de datos en k grupos en el que cada observación del grupo pertenece esta cercano al valor medio del grupo.
La agrupación del conjunto de datos puede ilustrarse en una partición del espacio de datos en celdas de Voronoi.
El problema es computacionalmente difícil (NP-hard). Sin embargo, hay metodologías heurísticas que se emplean comúnmente y convergen rápidamente en un óptimo similar, gracias a un refinamiento iterativo.
En nuestro caso, ambos algoritmo agruparán los países de acuerdo a un análisis complejo que incluye todas las variables al mismo tiempo y en un umero de grupos reducido. Es un análisis «multi dimensional», que NO se entienda que se agrupan al azar, definitivamente hay una relación clara entre los miembros de cada grupo. A veces lo difícil es encontrarla.
En el cuadro a continuación vamos a utilizar sólo 6 variables, y acá incluso todavía es posible descubrir estos comportamientos y agrupar los países, y poder concluir cómo están enfrentando los países el Covid19 ¿ Cómo ha sido el manejo ?:
RESULTADOS
Ahora veamos los resultados.
Quiero reiterar que siempre tenemos la tendencia de tratar de explicar porque el algoritmo agrupó los datos de una forma o de otra. Hay elementos que podrían resultar muy obvios y son los que yo describo, pero sin duda van a encontrar otros que son inexplicables porque esta inmersos en ese fenomeno de la multidimensionalidad.
a.) el clúster o grupo 1 tiene los países que tienen un número muy alto de casos por millón, no tienen tampoco el número mas alto de muertes, aunque tienen el número mas bajo de pruebas por mil habitantes . Sin duda incluye países que han enfrentado la pandemia en condiciones difíciles . Podríamos decir que no son ni los mas buenos pero tampoco los mas malos. En este grupo están muchos de los países que han sufrido mas el impacto de la Pandemia como UK, España y el Perú . En nuestro ranking de 4 están en el número 2. Los países que el algoritmo clasificó en éste grupo son:
'Afghanistan', 'Algeria', 'Angola', 'Argentina', 'Australia', 'Cameroon', 'Canada', 'Colombia', "Cote d'Ivoire", 'France', 'Ghana', 'Iraq', 'Italy', 'Kenya', 'Madagascar', 'Malaysia', 'Morocco', 'Mozambique', 'Myanmar', 'Nepal', 'Niger', 'Peru', 'Poland', 'Saudi Arabia', 'South Africa', 'South Korea', 'Spain', 'Sudan', 'Taiwan', 'Tanzania', 'Thailand', 'Uganda', 'Ukraine', 'United Kingdom', 'Uzbekistan', 'Venezuela', 'Yemen'
b.) el clúster o grupo 2 son los que tienen el tercer lugar en el número de casos, el primer lugar en numero de pruebas , y el segundo lugar en número de muertes. En este grupo está el numero mas grande de países (incluyendo a Costa Rica) . En esta clasificación no explica muchos de los países que están en este grupo. El grupo de países en este grupo son:
'Albania', 'Andorra', 'Anguilla', 'Antigua and Barbuda', 'Armenia', 'Aruba', 'Austria', 'Azerbaijan', 'Bahamas', 'Bahrain', 'Barbados', 'Belarus', 'Belgium', 'Belize', 'Benin', 'Bermuda', 'Bhutan', 'Bolivia', 'Bonaire Sint Eustatius and Saba', 'Bosnia and Herzegovina', 'Botswana', 'British Virgin Islands', 'Brunei', 'Bulgaria', 'Burkina Faso', 'Burundi', 'Cambodia', 'Cape Verde', 'Cayman Islands', 'Central African Republic', 'Chad', 'Chile', 'Comoros', 'Congo', 'Costa Rica', 'Croatia', 'Cuba', 'Curacao', 'Cyprus', 'Czech Republic', 'Denmark', 'Djibouti', 'Dominica', 'Dominican Republic', 'Ecuador', 'El Salvador', 'Equatorial Guinea', 'Eritrea', 'Estonia', 'Faeroe Islands', 'Falkland Islands', 'Fiji', 'Finland', 'French Polynesia', 'Gabon', 'Gambia', 'Georgia', 'Gibraltar', 'Greece', 'Greenland', 'Grenada', 'Guam', 'Guatemala', 'Guernsey', 'Guinea', 'Guinea-Bissau', 'Guyana', 'Haiti', 'Honduras', 'Hong Kong', 'Hungary', 'Iceland', 'International', 'Ireland', 'Isle of Man', 'Israel', 'Jamaica', 'Jersey', 'Jordan', 'Kazakhstan', 'Kosovo', 'Kuwait', 'Kyrgyzstan', 'Laos', 'Latvia', 'Lebanon', 'Lesotho', 'Liberia', 'Libya', 'Liechtenstein', 'Lithuania', 'Luxembourg', 'Macedonia', 'Malawi', 'Maldives', 'Mali', 'Malta', 'Mauritania', 'Mauritius', 'Moldova', 'Monaco', 'Mongolia', 'Montenegro', 'Montserrat', 'Namibia', 'Netherlands', 'New Caledonia', 'New Zealand', 'Nicaragua', 'Northern Mariana Islands', 'Norway', 'Oman', 'Palestine', 'Panama', 'Papua New Guinea', 'Paraguay', 'Portugal', 'Puerto Rico', 'Qatar', 'Romania', 'Rwanda', 'Saint Kitts and Nevis', 'Saint Lucia', 'Saint Vincent and the Grenadines', 'San Marino', 'Sao Tome and Principe', 'Senegal', 'Serbia', 'Seychelles', 'Sierra Leone', 'Singapore', 'Sint Maarten (Dutch part)', 'Slovakia', 'Slovenia', 'Somalia', 'South Sudan', 'Sri Lanka', 'Suriname', 'Swaziland', 'Sweden', 'Switzerland', 'Syria', 'Tajikistan', 'Timor', 'Togo', 'Trinidad and Tobago', 'Tunisia', 'Turks and Caicos Islands', 'United Arab Emirates', 'United States Virgin Islands', 'Uruguay', 'Vatican', 'Western Sahara', 'Zambia', 'Zimbabwe'.
c.) el clúster o grupo 3 son los que tienen el número mas alto de casos, el número mas alto de muertes y el número mas bajo de camas hospitalarias . Es posible que estén en este grupo los países con sistemas de salud que han atendido de peor forma la Pandemia. En este grupo se encuentran:
'Brazil', 'Indonesia', 'Nigeria', 'Pakistan', 'United States'
d.) el clúster o grupo 4 son los que tienen el número de casos promedio por millón mas bajo , la proporción de muertes mas baja, han hecho un número de pruebas bastante alto y hospitalariamente son los mas preparados. Es posible que estén en este grupo, estén los países con sistemas de salud fuertes. Los países en este grupo son:
['Bangladesh', 'Democratic Republic of Congo', 'Egypt', 'Ethiopia', 'Germany', 'Iran', 'Japan', 'Mexico', 'Philippines', 'Russia', 'Turkey', 'Vietnam']
Habría que analizar con mas detalle porque el algoritmo metió en este grupo a México y a Bangladés e Irán que ha tenido problemas de atención de la Pandemia bastante importantes.
Concluida esta primera parte debemos seguir las metodología de Machine Learning, ya que siempre es aconsejable utilizar al menos dos algoritmos diferentes sobre el mismo «conjunto o set de datos, por ello vamos a usar el :
b.) Análisis con agrupamiento jerárquico
En minería de datos, el agrupamiento jerárquico es un método de análisis de grupos puntuales, el cual busca construir una jerarquía de grupos. La Estrategia para el agrupamiento jerárquico puede ser de dos tipos:
- Aglomerativas: Este es un acercamiento ascendente: cada observación comienza en su propio grupo, y los pares de grupos son mezclados mientras uno sube en la jerarquía. (éste es el que vamos a utilizar en este caso)
- Divisivas: Este es un acercamiento descendente: todas las observaciones comienzan en un grupo, y se realizan divisiones mientras uno baja en la jerarquía.
En general, las mezclas y divisiones son determinadas con un Algoritmo voraz. Los resultados del agrupamiento jerárquico son usualmente presentados en un dendrograma.
Es muy interesante observar que ambos algoritmos arrojaron similar conformación de los grupos.
Con el propósito de que los mas entusiastas puedan seguir paso a paso el análisis realizado, he querido incluir en este post el código completo en Python que he escrito para poder hacer éste análisis.
* el presente artículo sobre Algoritmos no supervisados – K-means (k-medios) fue escrito por el Dr. Juan I. Barrios es médico especialista en Informática médica, es máster en Business Intelligence y experto en BIG DATA y Ciencia de datos en salud . Su trabajo consiste la aplicación de modelos de de Inteligencia artificial en salud. Reside en la ciudad de Barcelona, donde colabora en la cátedra de Informática Médica de la Universidad de Barcelona, como profesor visitante.