dic. 20, 2022, 18:41 p.m.
Con el objeto de hacer más eficiente el uso de recursos y mejorar la calidad de los datos publicados por el INE, durante los últimos años la institución
ha avanzado en estrategias automatizadas de codificación, principalmente basadas en técnicas de aprendizaje de máquinas (machine learning). Este trabajo
se encuentra a la base de la API de codificación automática que el presente tutorial busca acercar a las personas usuarias.
Esta API para la codificación automática pone a disposición de los usuarios y usuarias modelos para clasificar rama de actividad económica (CAENES) y
ocupación (CIUO-08.CL) de las personas, al nivel de desagregación de 1 y 2 dígitos, de acuerdo a como sea parametrizada. Los datos de entrenamiento provienen
principalmente de la coyuntura de la Encuesta Nacional de Empleo, de modo que los modelos deberían ser utilizados sobre glosas cuya recolección tenga
características similares a las implementadas en el trabajo de campo de dicha encuesta.
El etiquetado de los datos y el entrenamiento de los modelos fueron realizados en el marco del Proyecto Estratégico Servicios Compartidos para la Producción
Estadística, radicado en la Subdirección Técnica del INE. Para mayor información acerca del proceso de etiquetado manual y de la arquitectura de los modelos,
diríjase al documento “Codificación automática de clasificadores CIUO-08.CL y CAENES a partir de técnicas de machine
learning. Creación de sets de entrenamiento y optimización de algoritmos”, disponible en este mismo sitio para su consulta y descarga.
En la presente viñeta se muestra, a partir de algunos ejemplos, la forma de interactuar con la API de codificación automática mediante R y Python. Esta
guía está orientada a usuarios y usuarias con un manejo intermedio de R y/o Python y con conocimientos básicos de machine learning. Para una aproximación
más formal a los métodos de la API, diríjase al siguiente sitio https://rapps.ine.cl:9292/__docs__/
Predecir glosas individuales
El endpoint predict permite obtener el código predicho por el modelo para una glosa. El parámetro más importante es text, donde debe indicarse la glosa para la cual se busca una predicción. Además, se debe precisar el clasificador (ciuo o caenes), así como la cantidad de dígitos (1 o 2). En caso de que no se especifiquen estos últimos 2 parámetros, los valores por defecto serán caenes y 2, respectivamente.
Implementación en R
El paquete httr permite hacer solicitudes a un servidor de manera sencilla y provee algunas herramientas para manipular la respuesta. Mediante la función POST realizamos el request (o solicitud), entregando los parámetros para text, classification y digits.
library (httr)
glosa <- "manipulador de alimentos prepara colaciones"
request <- httr::POST("https://rapps.ine.cl:9292/predict",
encode = "json",
body = list(text = glosa,
classification = "ciuo",
digits = 2))
Para verificar el resultado utilizamos la función status_code, a través de la cual es posible verificar el estatus de la operación (idealmente 200). Finalmente, con la función content se extrae el resultado de la consulta, consistente en un archivo json que indica la categoría predicha y la probabilidad asignada por el modelo a la predicción.
# Revisar el status
httr::status_code(request)
## [1] 200
# Extraer el contenido
response <- httr::content(request)
response
## [[1]]
## [[1]]$codigo_int
## [1] 21
##
## [[1]]$cod_final
## [1] "51"
##
## [[1]]$prob
## [1] 0.8568
Implementación en Python
Para obtener una predicción para actividad económica, pero ahora mediante Python, es posible utilizar la librería requests. En este caso los parámetros text, classification y digits se entregan a través de un diccionario a la función post. Dado que estamos entregando una glosa de actividad económica, debemos utilizar el argumento “caenes”. Indicaremos, además, que la clasificación debe ser a un dígito.
import requests
glosa = "producción uva exportación"
data = {
"text" : glosa,
"classification" : "caenes",
"digits" : 1
}
response = requests.post("https://rap
ps.ine.cl:9292/predict", json=data)
Predicción de conjunto de glosas
Para codificar conjuntos de glosas, en lugar de textos individuales, se debe utilizar un procedimiento muy similar al anterior, pero ahora entregando una lista de strings. Para ello, se crea un dataframe que contiene glosas de actividad económica y entregamos esa información en el parámetro text. En este caso, se indica que la clasificación es cenes a un dígito.
Implementación en R
Para implementar la misma consulta anterior en R, utilizamos el siguiente código.
# Crear dataframe con ejemplos
caenes <- data.frame(glosa_caenes = c("extracción de cobre", "producción uva exportación", "Elaboración de Pan",
"Contratación de Personal reponedores", "Cultivo de trigo"))
# Enviar la consulta al servidor
request <- httr::POST("https://rapps.ine.cl:9292/predict"
,
encode = "json",
body = list(text = caenes$glosa_caenes,
classification = "caenes",
digits = 1)
)
# Extraer el contenido
response <- httr::content(request)
Dado que la respuesta de la API es un archivo json, una forma de ordenar el resultado, es mediante la función bind_rows del paquete dplyr.
# Ordenar el contenido
library(dplyr, include.only = 'bind_rows' )
bind_rows(response)
## # A tibble: 5 × 3
## codigo_int cod_final prob
## <int> <chr> <dbl>
## 1 1 B 1
## 2 0 A 0.999
## 3 2 C 1.00
## 4 13 N 0.993
## 5 0 A 1
Implementación en Python
Para implementar la misma consulta anterior en python, utilizamos el siguiente código.
import requests
import pandas as pd
caenes = {'glosa_caenes': ["extracción de cobre", "producción uva exportación", "Elaboración de Pan", "Contratación de Personal reponedores",
"Cultivo de trigo"]}
caenes = pd.DataFrame(data=caenes)
# Parámetros de la consulta
data = {
"text" : list(caenes.glosa_caenes),
"classification" : "caenes",
"digits" : 1
}
# Enviar la consulta al servidor
response = requests.post("https://rapps.ine.cl:9292/predict", json=data)
# Extraer el contenido de la consulta
content = response.json()
# Ordenar los resultados en un dataframe
pd.DataFrame(content)