Python Advanced Series

3. Imputación inteligente de nulos

3. Smart Null Imputation

En lugar de rellenar con ceros, predice el valor vacío basándote en el comportamiento de registros similares usando KNNImputer.

Instead of filling with zeros, predict missing values based on the behavior of similar records using KNNImputer.

⚠️ Advertencia de ciberseguridad, datos y producción ⚠️ Cybersecurity, data, and production warning

Este ejercicio es solo para aprendizaje y pruebas. No ejecutes modelos contra datos reales, sensibles, financieros, médicos, personales o ambientes de producción sin autorización, respaldos, pruebas previas, permisos mínimos, control de cambios, revisión humana y cumplimiento de los protocolos de ciberseguridad y privacidad de tu organización.

This exercise is for learning and testing only. Do not run models against real, sensitive, financial, medical, personal, or production data without authorization, backups, prior testing, least-privilege permissions, change control, human review, and compliance with your organization's cybersecurity and privacy protocols.

Objetivo del ejercicio

Exercise objective

Usar KNNImputer para completar valores faltantes en columnas numéricas. El algoritmo busca registros parecidos y estima el valor vacío usando vecinos cercanos, en vez de usar reglas simples como cero, promedio general o texto fijo.

Use KNNImputer to complete missing values in numeric columns. The algorithm finds similar records and estimates the missing value using nearby neighbors instead of simple rules such as zero, overall average, or fixed text.

Datos sintéticos

Synthetic data

IDEdadSalarioExperiencia
100125420002
100231520006
1003294
1004458200018
1005610009
10063872000

Ejemplo base

Base example

from sklearn.impute import KNNImputer

imputer = KNNImputer(n_neighbors=3)
columnas = ['edad', 'salario', 'experiencia']
df_clean = imputer.fit_transform(df[columnas])

Script completo

Complete script

# ==========================================================
# Python Advanced Topic 03
# Smart Null Imputation with KNNImputer
# ==========================================================

import pandas as pd
import numpy as np
from sklearn.impute import KNNImputer

# 1. Create synthetic data with missing values
records = [
    {"id": 1001, "edad": 25,   "salario": 42000, "experiencia": 2},
    {"id": 1002, "edad": 31,   "salario": 52000, "experiencia": 6},
    {"id": 1003, "edad": 29,   "salario": np.nan, "experiencia": 4},
    {"id": 1004, "edad": 45,   "salario": 82000, "experiencia": 18},
    {"id": 1005, "edad": np.nan, "salario": 61000, "experiencia": 9},
    {"id": 1006, "edad": 38,   "salario": 72000, "experiencia": np.nan}
]

df = pd.DataFrame(records)

# 2. Select numeric columns for imputation
columns_to_impute = ["edad", "salario", "experiencia"]

# 3. Create KNN imputer
# n_neighbors controls how many similar records are used
imputer = KNNImputer(n_neighbors=3)

# 4. Impute missing values
df_imputed_values = imputer.fit_transform(df[columns_to_impute])

# 5. Build clean dataframe
df_clean = df.copy()
df_clean[columns_to_impute] = df_imputed_values

# 6. Round values for reporting
df_clean["edad"] = df_clean["edad"].round(0).astype(int)
df_clean["salario"] = df_clean["salario"].round(2)
df_clean["experiencia"] = df_clean["experiencia"].round(1)

# 7. Add imputation flags for auditability
df_clean["edad_imputada"] = df["edad"].isna()
df_clean["salario_imputado"] = df["salario"].isna()
df_clean["experiencia_imputada"] = df["experiencia"].isna()

# 8. Export report
output_file = "knn_imputation_report.csv"
df_clean.to_csv(output_file, index=False)

print(df_clean)
print(f"
Report created: {output_file}")

Salida esperada en consola

Expected console output

     id  edad   salario  experiencia  edad_imputada  salario_imputado  experiencia_imputada
0  1001    25  42000.00          2.0          False             False                  False
1  1002    31  52000.00          6.0          False             False                  False
2  1003    29  55000.00          4.0          False              True                  False
3  1004    45  82000.00         18.0          False             False                  False
4  1005    35  61000.00          9.0           True             False                  False
5  1006    38  72000.00         11.0          False             False                   True

Report created: knn_imputation_report.csv

Reporte CSV generado

Generated CSV report

IDEdadSalarioExperienciaCampo imputado
10032955000.004.0Salario
10053561000.009.0Edad
10063872000.0011.0Experiencia

Aplicaciones reales

Real-world applications

  • Completar campos numéricos faltantes antes de análisis.
  • Preparar datos para modelos de Machine Learning.
  • Reducir pérdida de registros por valores nulos.
  • Mejorar reportes cuando los datos vienen incompletos.
  • Complete missing numeric fields before analysis.
  • Prepare data for Machine Learning models.
  • Reduce record loss caused by null values.
  • Improve reports when data arrives incomplete.

Recomendaciones

Recommendations

  • No imputar sin dejar bandera de auditoría.
  • Usar solo columnas numéricas comparables.
  • Revisar si los datos tienen escalas muy diferentes.
  • Validar siempre los valores imputados con criterio humano.
  • Do not impute without leaving an audit flag.
  • Use only comparable numeric columns.
  • Review whether data uses very different scales.
  • Always validate imputed values with human judgment.

Valor del tópico

Topic value

Este patrón ayuda a tratar valores faltantes de forma más inteligente que rellenar con ceros. Es especialmente útil cuando los registros tienen patrones parecidos y se necesita conservar la mayor cantidad posible de información útil.

This pattern handles missing values more intelligently than filling with zeros. It is especially useful when records have similar patterns and the goal is to preserve as much useful information as possible.