Obtener la Edad de un Individuo desde su RUT

Aplicación web para conocer la edad de una persona y su fecha de nacimiento con su RUT: RUT a Edad y Fecha de Nacimiento

Intuitívamente se sabe que existe una relación entre la edad de una persona y el número correlativo de su RUT, en donde personas que cuentan con una mayor edad, suelen tener un número correlativo de RUT bajo. Para poder probar esta hipótesis se utilizará un método de aprendizaje estadístico básico que nos permitirá inferir la relación existente entre el número correlativo del RUT de la Persona y su edad.

RUT

El Rol Único Nacional, conocido también por el acrónimo RUT, es el número identificatorio único e irrepetible que posee todo chileno, residente o no en Chile, y todo extranjero que permanezca, temporal o definitivamente, con una visa distinta a la visa de turista en dicho país.

El RUT se otorga siguiendo un orden correlativo, por lo tanto es muy posible que una persona con un RUT menor sea de mayor edad, dado que la mayor parte de los RUT proviene de inscripciones de nacimiento.

El RUT consta de dos partes separadas por un guion: el número correlativo y el dígito verificador o DV. El DV consta de un dígito que va del 0 (cero) al 9 (nueve) y la letra K, que se obtiene a partir del correlativo mediante el cómputo de un algoritmo.

Regresión

La Regresión es un conjunto de procesos estadísticos para estimar relaciones entre variables. La regresión nos ayuda a entender cómo cambia una variable en función de otra variable, junto con entender la fuerza de relación entre ellas.

Datos

Se realizaron búsquedas en Google para encontrar documentos que contuvieran los términos edad y rut, estos documentos fueron procesados y se consolidaron todos en un archivo separado por comas.

Método

Se utilizó el lenguaje de programación python bajo los siguientes módulos:

  • Pandas: Biblioteca para el manejo y estructuración de datos.
  • Numpy: Biblioteca para la realización de cálculos vectoriales.
  • Seaborn: Visualización de los resultados.
  • Scipy: Conjunto de pruebas y modelos estadísticos.
  • Math: Módulo de cálculos matemáticos.
  • Datetime: Módulo para interactuar con fechas.
import pandas as pd
import numpy as np
import seaborn as sns
import scipy
import math
import datetime as dt

Se importan los datos y se determinan los tipos de variable.

datos = pd.read_csv("rut.csv",
                   low_memory=False,
                   error_bad_lines=False,
                   sep=";")
datos["fechaNacimiento"] = pd.to_datetime(datos["fechaNacimiento"])
datos["anoNacimiento"] = datos["fechaNacimiento"].dt.year + (datos["fechaNacimiento"].dt.month - 1)/12

Dimensiones de la tabla.

datos.shape
(1175, 3)

Se elimina el dígito verificador.

datos['rut'] = datos['rut'].astype(str).str[:-2].astype(np.int64)

Se ajusta el modelo de regresión lineal.

slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(datos.rut,datos.anoNacimiento)

Pendiente de la curva

slope
3.3363697569700348e-06

Intercepto de la curva

intercept
1932.2573852507373

Nivel de ajuste del modelo.

r_value**2
0.9574379851501933

Resultados

El año de nacimiento del individuo está deteminado por el valor del número correlativo del RUT, multiplicado por la pendiente de la curva ajustada sumado a una constante.

rut = 5126663
fecha_nac = int(rut)*slope+intercept
ano_nac = math.floor(fecha_nac)
mes_nac = int(round((fecha_nac-ano_nac)*12))
fecha_nac = dt.date(ano_nac, mes_nac, 1)
fecha_hoy = dt.date.today()
from dateutil.relativedelta import relativedelta
edad = relativedelta(fecha_hoy, fecha_nac).years
meses = ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']
'El individuo tiene {} años y nació en {} de {}'.format(edad, meses[fecha_nac.month-1], fecha_nac.year)
'El individuo tiene 69 años y nació en abril de 1949'

Visualización de la relación entre el año de nacimiento del individuo y su número correlativo de RUT.

sns.set(color_codes=True)
ax = sns.regplot(x="rut", y="anoNacimiento", data=datos,
                line_kws={'label':"y={0:.1}x+{1:.1f}".format(slope,intercept)})
ax.set_title("Relación entre el RUT y la edad de un individuo")
ax.set_xlabel("RUT (Número Correlativo)")
ax.set_ylabel("Año de Nacimiento")
ax.legend()
Gráfico de dispersión representado cada dato junto con la línea de regresión lineal.

Conclusión

Existe una relación lineal significativa entre el número correlativo del RUT de un individuo y su fecha de nacimiento.

Aplicación

Si deseas conocer el año de nacimiento de un individuo a partir de su RUT, debes multiplicar el número correlativo del RUT del individuo en millones por 3.34 y sumar 1932.26

26 Replies to “Obtener la Edad de un Individuo desde su RUT”

  1. Hola Fabián,

    Muchas gracias por tu aporte. Una consulta, tienes en mente alguna corrección sencilla que pueda aplicarse al modelo para ruts de extranjeros?

    Saludos y gracias.

  2. el resultado corresponde, no al año de nacimiento, pero si al año de primera emisión del documento. Suele coincidir, pero no siempre

    1. Varias veces en el artículo se especifica claramente que se debe usar el número correlativo del RUT, no el dígito verificador

  3. Mi rut 5514807-4, naci 23.02.1947, como ajusto para decir que tengo 73 años, 4 meses de edad.

  4. ¿Tienes el csv con los datos?

    Pasa que la relación no es tan lineal pues para los viejos no funciona, hay que ajustar por otros modelos para tener una fórmula más precisa

    1. Está todo lo necesario en github https://github.com/fvillena/rut-a-edad

      Claramente hay mejores métodos para modelar esto, pero el objetivo principal de este proyecto era que fuera lo más fácil para que cualquier persona lo pudiera implementar con una calculadora simple.

      Si quieres puedes hacer un fork de mi repositorio y me compartes tus resultados, sería muy bueno!

      1. Ok, exploraré otros métodos y cualquier cosa te aviso. Le puedes hacer el commit correspondiente después para asi mejorar tu calculadora!

        Saludos

  5. Excelente!!!.

    Entonces para poder ajustar el modelo a los rut nuevos para extranjeros que han sacado carnet chileno, este modelo lo deberé modificar.

    Gracias

    1. Probablemente no será útil reajustar este modelo, quizá puedes ajustar otro modelo con 2 atributos: RUT y Extranjero (Sí o No).

  6. Se multiplica 0.00000334 o el rut con punto en el millón. (18.938462). Así como está la fórmula que puso no Funcióna

  7. Hola, cómo estás Fabián? Una consulta, vi que tienes dentro de tu mismo sitio tienes un verificador de rut, cómo lograste eso? Yo también tengo un sitio con wordpress pero no sé montar los códigos que hago dentro de él. Agradecería mucho tu respuesta!

    De antemano muchas gracias!

      1. Hola Fabián,
        muchas gracias por la rápida respuesta! creo que me exprese mal, lo que quería preguntar es como hiciste que un wordpress, que tiene un formato rígido para agregar páginas y posts tenga una parte donde el usuario interactue. A mi también me gustaría agregar una sección donde el usuario interactue y agregar una respuesta de acuerdo a la interacción que de el usuario.
        de ante Muchas gracias de nuevo!

  8. Hola,

    Tengo consultas respecto a la data de entrada que utilizaste, hablas de que buscaste datos de rut y edad pero luego trabajas una fecha de nacimiento directamente con tal d obtener el año de nacimiento, por ende, cual sería la input que utilizas? Rut + edad ? Rut + fecha nacimiento ?

    Lo otro, como se puede reajustar el modelo con tal de mejorar resultados, por que he hecho unas pruebas con algunos ruts y determinan bien el año de nacimiento, no así el mes de nacimiento.

    1. Efectivamente usé rut y fecha de nacimiento. Para probar otro algoritmo para ajustar otro modelo debes descargar datos de fechas de nacimiento y edad para posteriormente utilizar mi código publicado.

Deja un comentario

This site uses Akismet to reduce spam. Learn how your comment data is processed.