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()
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
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.
se cumple para personas naturales pero no para personas jurídicas
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
Que pasa con los rut con -k?
Varias veces en el artículo se especifica claramente que se debe usar el número correlativo del RUT, no el dígito verificador
Mi rut 5514807-4, naci 23.02.1947, como ajusto para decir que tengo 73 años, 4 meses de edad.
¿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
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!
Ok, exploraré otros métodos y cualquier cosa te aviso. Le puedes hacer el commit correspondiente después para asi mejorar tu calculadora!
Saludos
Excelente!!!.
Entonces para poder ajustar el modelo a los rut nuevos para extranjeros que han sacado carnet chileno, este modelo lo deberé modificar.
Gracias
Probablemente no será útil reajustar este modelo, quizá puedes ajustar otro modelo con 2 atributos: RUT y Extranjero (Sí o No).
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
Eso es exactamente lo que dije “RUT del individuo en millones”
Hola. Fabián la fórmula se puede usar en excel para saber la fecha de nacimiento o la edad?
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!
Uso esta biblioteca normalmente para realizar las verificaciones https://github.com/jlobos/rut.js/
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!
No programé el predictor de edad sobre WordPress, sino que usé Javascript con jQuery fuera de WordPress.
Excelente! eso quería saber muchas gracias!
Eres genial!!, muchas gracia!!
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.
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.
Cuál se supone que es la edad, los ultimos digitos del resultado o los primeros?
llegue buscando cobre y encontre oro
muy buena la aplicación, lo encontré justo cuando lo necesitaba
Muy buena la aplicación para determinar el año de nacimiento. Muchas gracias.