INE

Texto grande

Texto Pequeño

Blanco y Negro

Eliminar Todos

Evalúenos
¿La experiencia de navegación le resultó fácil?

¿Encontró la información buscada?

¿La información encontrada es útil?

Para finalizar, por favor introduzca el siguiente código

Tutorial API de codificación automática

Tutorial - API de codificación automática

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 y las VIII y IX Encuestas de Presupuestos Familiares, 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 (actualmente Área de Ciencia de Datos de la Unidad de Gobierno de Datos). 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.

Importante:

Para CIUO el modelo espera un texto que concatene oficio y tareas separados por un espacio.

Para CAENES, espera un texto que concatene actividad principal, oficio y tareas separados por un espacio.

Considerar:

Si no se cuenta con toda esa información, el modelo igualmente entregará predicciones, pero estas pueden ser menos precisas (por ejemplo, si solo entregamos oficio para CIUO o solo actividad económica en CAENES).
Además, se debe precisar el clasificador (ciuo o caenes), así como la cantidad de dígitos (1 o 2). El endpoint no tiene valores por defecto para estos parámetros, pero nos recordará en su respuesta si se ingresó algún valor incorrecto o bien faltó alguno de estos parámetros. 

 


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, "text")
response


## [[1]]
## 
## [[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://rapps.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 caenes 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 fromJSON del paquete jsonlite.


# Ordenar el contenido 
library(jsonlite)
response <- httr::content(request, "text")
fromJSON(response) |> as.data.frame()

 


## # A tibble: 5 × 3
##    cod_final   prob
##      <chr>     <dbl>
## 1      B         1    
## 2      A         0.999
## 3      C         1.00 
## 4      N         0.993
## 5      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

glosas = ["extracción de cobre", "producción uva exportación",
"Elaboración de Pan", "Contratación de Personal reponedores", "Cultivo de trigo"]
    # Parámetros de la consulta data = { "text" : glosas, "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)

Obtener datos de entrenamiento

 

La API también permite obtener los datos con los que se entrenó originalmente el modelo, a través del endpoint get_training_data, utilizando el método GET. Los datos entregados son un diccionario con dos llaves: train y test. Cada llave contiene todos los datos asociados al entrenamiento y validación del modelo, respectivamente. A continuación se explica cómo acceder a estos en R y Python y cómo transformarlos a un formato más cómodo, como lo son los DataFrames.


 



Implementación en R

Para obtener los datos de entrenamiento en R, utilizamos el siguiente código.


# Realizar la consulta GET para obtener datos de entrenamiento
request <- httr::GET("https://rapps.ine.cl:9292/get_training_data?classification=ciuo")

# Extraer el contenido
datos = httr::content(request)

# Convertir a DataFrames
train = datos$train |> dplyr::bind_rows()
test = datos$test |> dplyr::bind_rows()

Implementación en Python

Para obtener los datos de entrenamiento en Python, utilizamos el siguiente código.


import requests
import pandas as pd

# Realizar la consulta GET para obtener datos de entrenamiento
request = requests.get("https://rapps.ine.cl:9292/get_training_data?classification=ciuo")

# Obtener datos
datos = request.json()

# Convertir a DataFrames
train = pd.DataFrame(datos['train'])
test = pd.DataFrame(datos['test'])



Seleccionar modelo a utilizar

 

Durante la historia de la API, se han desarrollado diversos modelos. Actualmente, esta también permite seleccionar cualquier de estos modelos. El endpoint get_model_metadata utilizando el método GET, permite obtener información respecto a cuándo fueron entrenados estos modelos y qué diferencia tienen con la versión anterior. Ahora, para obtener predicciones o datos de modelos anteriores, existe el parámetro model_version. Esta tiene por defecto el valor "latest", es decir, entrega el último modelo entrenado. En caso de querer otra versión, debe enviarse un valor entero positivo. Al momento de escribir este tutorial, se aceptan los valores 1, 2 y 3 (este último siendo equivalente a "latest").

Nota: la metadata de los modelos entregada en get_model_metadata tiene una llave version que se corresponde con model_version. Esto quiere decir que get_model_metadata debiese guiar a las personas usuarias a seleccionar la versión del modelo de interés, ya sea para predecir u obtener datos de entrenamiento.

 


Implementación en R

Para obtener la metadata de los modelos, datos de entrenamiento y predicciones de un modelo específico en R, utilizamos el siguiente código.


library(httr)
library(jsonlite)

# Obtener metadata de los modelos
request_modelos <- httr::GET("https://rapps.ine.cl:9292/get_model_metadata")
cat(prettify(content(request_modelos, as = "text", encoding = "UTF-8")))

# Resultado:
# {
#   "models": [
#     {
#       "arquitectura": "GRU",
#       "version": 1,
#       "fecha_disponiblizacion": "03-2025",
#       "modelos_incluidos": [
#         "ciuo-1d",
#         "ciuo-2d",
#         "caenes-1d",
#         "caenes-2d"
#       ],
#       "resumen_cambios": "Modelo inicial"
#     },
#     {
#       "arquitectura": "GRU",
#       "version": 2,
#       "fecha_disponiblizacion": "07-2025",
#       "modelos_incluidos": [
#         "ciuo-1d",
#         "ciuo-2d"
#       ],
#       "resumen_cambios": "reentrenamiento ciuo incluyendo datos IX EPF y EPF Aysén"
#     },
#     {
#       "arquitectura": "GRU",
#       "version": 3,
#       "fecha_disponiblizacion": "09-2025",
#       "modelos_incluidos": [
#         "ciuo-1d",
#         "ciuo-2d",
#         "caenes-1d",
#         "caenes-2d"
#       ],
#       "resumen_cambios": "Reentrenamiento todos los modelos con más datos, foco en códigos militares."
#     }
#   ]
# }

# Obtener datos de entrenamiento de un modelo específico
request_datos <- httr::GET("https://rapps.ine.cl:9292/get_training_data?classification=ciuo&model_version=2")

# Obtener datos
datos <- httr::content(request_datos)

# Convertir a DataFrames
train <- datos$train |> dplyr::bind_rows()
test <- datos$test |> dplyr::bind_rows()

# Obtener predicciones de un modelo específico
glosas <- c(
  "extracción de cobre",
  "producción uva exportación",
  "Elaboración de Pan",
  "Contratación de Personal reponedores",
  "Cultivo de trigo"
)

# Parámetros de la consulta
data <- list(
  text = glosas,
  classification = "caenes",
  digits = 1,
  model_version = 1 # Versión modelo a usar, si no se especifica se usará la última versión disponible
)

# Enviar la consulta al servidor
request_predicciones <- httr::POST(
  "https://rapps.ine.cl:9292/predict",
  body = data,
  encode = "json"
)

content <- httr::content(request_predicciones, "text")
fromJSON(content) |> as.data.frame()

Implementación en Python

Para obtener la metadata de los modelos, datos de entrenamiento y predicciones de un modelo específico en Python, utilizamos el siguiente código.


import requests 
import pandas as pd
import json

# Obtener metadata de los modelos
request_modelos = requests.get("https://rapps.ine.cl:9292/get_model_metadata")
print(json.dumps(request_modelos.json(), indent=2))

# Resultado:
# {
#   "models": [
#     {
#       "arquitectura": "GRU",
#       "version": 1,
#       "fecha_disponiblizacion": "03-2025",
#       "modelos_incluidos": [
#         "ciuo-1d",
#         "ciuo-2d",
#         "caenes-1d",
#         "caenes-2d"
#       ],
#       "resumen_cambios": "Modelo inicial"
#     },
#     {
#       "arquitectura": "GRU",
#       "version": 2,
#       "fecha_disponiblizacion": "07-2025",
#       "modelos_incluidos": [
#         "ciuo-1d",
#         "ciuo-2d"
#       ],
#       "resumen_cambios": "reentrenamiento ciuo incluyendo datos IX EPF y EPF Aysén"
#     },
#     {
#       "arquitectura": "GRU",
#       "version": 3,
#       "fecha_disponiblizacion": "09-2025",
#       "modelos_incluidos": [
#         "ciuo-1d",
#         "ciuo-2d",
#         "caenes-1d",
#         "caenes-2d"
#       ],
#       "resumen_cambios": "Reentrenamiento todos los modelos con más datos, foco en códigos militares."
#     }
#   ]
# }

# Obtener datos de entrenamiento de un modelo específico
request_datos = requests.get("https://rapps.ine.cl:9292/get_training_data?classification=ciuo&model_version=2")

# Obtener datos
datos = request_datos.json()

# Convertir a DataFrames
train = pd.DataFrame(datos['train'])
test = pd.DataFrame(datos['test'])

# Obtener predicciones de un modelo específico
glosas = ["extracción de cobre", "producción uva exportación",
 "Elaboración de Pan", "Contratación de Personal reponedores", "Cultivo de trigo"]

# Parámetros de la consulta
data = {
    "text" : glosas,
    "classification" : "caenes",
    "digits" : 1,
    "model_version" : 1 # Versión modelo a usar, si no se especifica se usará la última versión disponible
}

# Enviar la consulta al servidor
request_predicciones = requests.post("https://rapps.ine.cl:9292/predict", json=data) 

content = request_predicciones.json()
content

Sistema de Atención
Ciudadana a través de CRM

Le recomendamos utilizar este canal para contactarnos. Nuestro sistema CRM permite registrar y seguir cada caso dentro de los plazos establecidos por la normativa y gestionar de mejor manera a nuestros usuarios/as.

Ingresar
Instituto Nacional de Estadísticas