Objetivo. Distinguir fila, columna, feature, target, identificador y fuga de información en una tabla real.
- Evidencia de aprendizaje: Clasifica cada columna de una tabla nueva como feature, target, identificador o fuga, y justifica cada decisión.
- Actividad final: Decidir si una columna produce fuga de información (Date en Melbourne; p_el en Galaxy Zoo).
- Criterio de dominio: Clasifica sin error una tabla de seis o más columnas y detecta la fuga con el argumento «no existirá al momento de predecir».
Datos, filas, columnas, features y target
Qué es una fila, qué es una columna, y por qué el target no es una
propiedad de la tabla sino una decisión tuya. Y cuál es la columna que nunca
debe entrar: la que ya sabe la respuesta.
Fundamentos de Ciencia de Datos · UdeC · Clase del 15-jul (recuperación, lámina FCD-04 Calidad de datos)
Cuatro conceptos dependen directamente de este. Es el cuello de botella del grafo:
si no separas feature de target no puedes razonar sobre fuga de información, y sin
eso el resto del curso se cae.
[FUENTE · Repo: 07_DATITO/curriculum.yaml, campo prerrequisitos]
1 · Las dos preguntas de tu profesor
No enseña esto con vocabulario de pandas ni de tidy data. Enseña dos preguntas, y las repite tabla tras tabla:
2. ¿Cuáles son las variables? → cada una es una columna
Antes de las dos preguntas, la palabra de base. La lámina oficial define el dato así:
En clase lo dijo casi con las mismas palabras [FUENTE · Repo: 05_CLASES/transcripciones/03Clase_Recuperación_Fundamentos_en_Ciencia_de_Datos_15_julio.md · 0:08:41–0:08:50], y unos minutos después separó dato de información: la información son los datos puestos dentro de un contexto [FUENTE · Repo: 05_CLASES/transcripciones/03Clase_Recuperación_Fundamentos_en_Ciencia_de_Datos_15_julio.md · 0:14:24–0:14:31]. «1,65 metros» es un dato; «la altura de esta persona es 1,65 metros, y es la más baja del curso» ya es información. Una celda de tu tabla es un dato; la tabla con sus nombres de columna y su pregunta es lo que la vuelve información. [DATITO] ejemplo sobre la altura que usó el profesor.
Ahora la tabla. La lámina 18 fija las dos piezas y el término que sí te pueden preguntar:
Su ejemplo limpio son cilindros: cada fila, un cilindro; las columnas, altura, radio y si le gusta o no. En clase remarcó que «variable» y «atributo» son exactamente lo mismo [FUENTE · Repo: 05_CLASES/transcripciones/03Clase_Recuperación_Fundamentos_en_Ciencia_de_Datos_15_julio.md · 0:50:37–0:51:10], y que tres atributos hacen datos «tridimensionales» [FUENTE · Repo: 05_CLASES/transcripciones/03Clase_Recuperación_Fundamentos_en_Ciencia_de_Datos_15_julio.md · 0:51:51–0:52:03].
p, y va a ser el protagonista de la sección 7.
Él mismo advirtió que el caso limpio es el raro: si todavía no te ha tocado
reestructurar una tabla así, te va a tocar
[FUENTE · Repo: 05_CLASES/transcripciones/03Clase_Recuperación_Fundamentos_en_Ciencia_de_Datos_15_julio.md · 0:51:31–0:51:43].
Y ese mismo día puso el caso sucio: una tabla de consumo de combustible de
camiones donde la columna Consumo mezcla días y camiones. Después
de discutirla con el curso, cerró así:
Ejercicio de aplicación · La tabla de la lámina 27, como en la 9A y la 9B del Certamen 1
La lámina 27 entrega esto (consumo de bencina, sin unidad):
Consumo Cantidad El Lunes Camión 1 400 Camión 2 3500 Camión 3 2000 El Martes Camión 1 350 Camión 2 0 Camión 3 400 El Miércoles Camión 1 500 Camión 2 3600 Camión 3 0
En papel: (1) ¿qué objeto o evento se mide?, (2) ¿cuáles son las variables?, (3) ¿qué columna sirve de identificador?, (4) dibuja la tabla corregida con sus columnas y las tres primeras filas. Escríbelo antes de abrir.
Respuesta correcta y cómo se resuelve
Respuesta: se mide el consumo de bencina de un camión en un día; las
variables son Día, Camión y Consumo; ninguna columna identifica una fila,
así que se crea un ID; la tabla corregida tiene una fila por camión y día:
ID · Día · Camión · Consumo.
Cómo se resuelve:
- Mira un número cualquiera, el 3500, y pregúntate de qué es: del camión 2, el lunes. Entonces el evento es «consumo de un camión en un día».
- Las variables son lo que cambia entre esos eventos: el día (escondido en
filas separadoras), el camión (metido en la columna
Consumo) y la cantidad. - ¿Alguna columna distingue cada fila? No: «Camión 1» aparece tres veces. Se crea un ID del 1 al 9.
- Se arma la tabla: 3 días × 3 camiones = 9 filas; las filas «El Lunes» desaparecen porque su contenido pasa a la columna Día, escrita completa.
Error típico: decir que las variables son «Consumo» y «Cantidad» (eso son los encabezados, no las variables), o que se mide «camiones» (falta el día). Otro: borrar los ceros o marcar el 3500 como error; la respuesta oficial conserva ambos. Tabla destino del propio profesor:
ID Día Camión Consumo 1 2026-07-13 1 400 2 2026-07-13 2 3500 3 2026-07-13 3 2000
Cuatro columnas: un ID que no mide nada, la fecha completa en vez de «El Lunes», el camión como número y el consumo. Nota que conserva los ceros y no marca el 3500 como error.
[FUENTE · Repo: 05_CLASES/11_PRESENTACIÓN/_markdown/FCD-2026-2_04_CalidadDeDatos.md · láminas 27–28]
· La 9A (calificaciones con fechas como encabezados y una Matrícula
con N/A) y la 9B (camiones con −999 y 2900)
son variantes de este mismo ejercicio: certamen_1.html#p9a
· certamen_1.html#p9b.
2 · La anatomía completa de un dataset
La descripción más limpia de un dataset que se dijo en tu curso vino de una presentación de compañeros sobre biopsias de mama:
Ahí está todo (el target, diagnosis, vale M o B: maligno o
benigno). Un dataset tiene tres tipos de columna, y confundirlos es lo que
se castiga:
| Tipo | Cuántas | Qué hace | ¿Entra al modelo? |
|---|---|---|---|
| Identificador | 1 | Distingue una fila de otra. No mide nada del objeto. | No. Si entra, el modelo memoriza en vez de aprender |
Target (y) | 1 | Lo que quieres predecir | Nunca como entrada. Es la salida |
Features (X) | 30 | Lo que usas para predecir | Sí — las que tú decidas |
1 + 1 + 30 = 32. La aritmética cuadra, y esa es la comprobación que puedes hacer en cualquier tabla del certamen.
¿Para qué existe una columna que no mide nada? El profesor lo respondió con una razón de modelamiento, no de orden:
Un ID repetido no es un detalle cosmético: significa que no sabes qué es una fila. Es lo que rompe la 9A del Certamen 1, donde la
Matrícula
vale N/A en una fila (certamen_1.html#p9a).
Ejercicio · Clasifica estas columnas antes de seguir
Tabla de un hospital, una fila por paciente atendido en urgencias.
Columnas: RUT, Edad, Temperatura,
Presión, Hora_ingreso, Diagnóstico,
Hora_alta. Quieres predecir el diagnóstico al momento del ingreso.
¿Cuál es el ID, cuál el target, cuáles features, y cuál columna sobra aunque parezca útil?
Respuesta correcta y cómo se resuelve
Respuesta: RUT es el ID, Diagnóstico el
target, Edad, Temperatura y Presión las
features, y Hora_alta sobra porque no existe al momento de
predecir.
Cómo se resuelve: primero el target (lo dice el enunciado: el diagnóstico); después, para cada columna restante, dos preguntas: ¿mide algo del paciente o solo lo identifica? y ¿la tengo en la mano en el ingreso?
- ID:
RUT— identifica, no mide. Fuera del modelo. - Target:
Diagnóstico. - Features:
Edad,Temperatura,Presión. - La que sobra:
Hora_alta. Es información real y verdadera, pero no existe todavía en el momento en que quieres predecir. Usarla es fuga de información: el modelo se vería genial en la tabla y sería inútil en urgencias. Hora_ingresoes discutible: sirve si la hora del día cambia el tipo de urgencia, pero es la clase de columna que hay que justificar, no asumir.
Error típico: meter Hora_alta «porque es un dato real»
o porque mejora la exactitud en la tabla. Que sea verdadera no la hace usable:
a la hora de predecir todavía no ocurrió.
[DATITO] Ejercicio construido para este artefacto. El mecanismo —una columna que no existe al momento de predecir— tiene nombre, fuga de información, y está en la sección 9; su consecuencia sobre la partición de filas, en train_validation_test.html.
3 · El target es una decisión, no una propiedad de la columna
Esta es la parte que la gente no internaliza. Price no «es» el
target de Melbourne. Es el target porque tú decidiste preguntar cuánto cuesta
una propiedad. La misma tabla, con otra pregunta, tiene otro target — y hasta
cambia de tipo de problema.
Price eliges
Type (casa / townhouse / unidad) como target, ¿el problema sigue
siendo de regresión?Respuesta correcta y cómo se resuelve
Respuesta: no; con Type como target el problema pasa a ser
de clasificación multiclase (tres clases: casa, townhouse, unidad).
- Mira qué valores puede tomar la columna que elegiste como target:
h,t,u. - ¿Existe un punto medio entre «casa» y «unidad»? No. Es categórica.
- Target categórico con más de dos valores → clasificación multiclase. Con
Price, que es continuo, era regresión. - Cambia también cómo mides el error: aciertos por clase (matriz de confusión, F1) en vez de AUD de diferencia (MAE).
Error típico: decidir el tipo de problema mirando las features («como
Rooms y Distance son números, es regresión»). Lo fija el
target, no las entradas.
[FUENTE · Repo: 05_CLASES/11_PRESENTACIÓN/_markdown/FCD-2026-2_04_CalidadDeDatos.md · lámina 20] · mismo razonamiento que la P6 del Certamen 1 (certamen_1.html#p6) · pasos [DATITO]
Haz clic en una columna para convertirla en el target
Columnas reales de tu dataset de Melbourne, antes del encoding.
[FUENTE · Repo: 03_SCRIPTS/modelamiento_temporal.py, listas NUM y CAT]
En la clase de regresión lo dijo de frente: en la tabla, el target no se ve distinto de las demás columnas.
«Tú sabes»: nadie más lo sabe por ti, ni el CSV ni pandas. Y cuando le tocó interrogar a un grupo en las presentaciones del 14-ago, empezó por ahí. El grupo tenía la nota final de una asignatura (0 a 100) y la había convertido en aprobado/reprobado para usarla como target:
Un compañero tiene la nota final (0 a 100) de cada estudiante y quiere predecir si aprueba. Explícale, en 5 o 6 líneas y sin fórmulas:
(1) qué cambia si el target es la nota o si es aprobado/reprobado: tipo de problema, cómo se mide el error y qué información se pierde;
(2) por qué, si elige aprobado/reprobado, la nota no puede quedar entre las features;
(3) por qué aprobado/reprobado, aunque sea categórica, todavía tiene un orden.
Escríbelo tú. Después llévalo a Datito para que te lo corrija.
Criterios de corrección (no es una respuesta modelo)
- Conecta el tipo de problema con el target, no con las features: nota → regresión; aprobado/reprobado → clasificación binaria.
- Nombra lo que se pierde al discretizar con un ejemplo concreto (dos notas muy distintas que quedan en la misma clase).
- Identifica que aprobado/reprobado se calcula desde la nota: si la nota entra como feature, el modelo copia la regla del umbral. Usa la palabra que corresponde (la sección 9 la define).
- Usa la idea de discretización de una variable numérica de la sección 6, no solo «porque aprobar es mejor que reprobar».
- No dice «clasificación es mejor» o «regresión es mejor» sin decir para qué pregunta.
[DATITO] Criterios construidos para este artefacto a partir del caso real del 14-ago.
Respuesta correcta y cómo se resuelve
Respuesta: son dos problemas distintos sacados del mismo dato: la nota como target es regresión y aprobado/reprobado es clasificación binaria; si eliges aprobado/reprobado, la nota no puede ser feature porque el target se calcula desde ella (fuga), y aprobado/reprobado conserva un orden porque es una nota discretizada.
Respuesta modelo, como se la dirías al compañero:
Cómo se construye: (1) target → tipo de problema; (2) tipo de problema → cómo se mide el error; (3) qué se pierde al discretizar, con un ejemplo; (4) la regla de fuga: ¿el target se calcula desde alguna feature?; (5) el orden de una variable discretizada; (6) cerrar con «depende de la pregunta» y decir de qué depende.
Error típico: defender la nota como feature «porque correlaciona muchísimo con aprobar». Correlaciona porque es la misma información: por eso es fuga y no una buena feature.
[FUENTE · Repo: 05_CLASES/transcripciones/2026-08-14T22_09_23Z_Fundamentos_en_Ciencia_de_Datos.md · 1:55:00–1:57:31] (el caso) · [FUENTE · Repo: 05_CLASES/transcripciones/2026-08-07T22_14_16Z_Fundamentos_en_Ciencia_de_Datos.md · 0:12:19–0:12:41] (la discretización conserva el orden) · redacción [DATITO]
4 · La ecuación, desarmada
Todo lo anterior se escribe en una línea, y en el certamen te la pueden entregar escrita así, sin la tabla al lado:
Qué problema resuelve: poner nombre a cada parte de la tabla para poder hablar de ellas sin dibujarla. De dónde sale: de escribir la tabla como una matriz — las filas de la matriz son las filas de la tabla.
| Símbolo | Qué es en la tabla | Rol |
|---|---|---|
| n | Número de filas. Cuántos objetos o eventos mediste | DATO |
| p | Número de features. La «dimensión de los datos» de tu profesor | LO DECIDES TÚ |
| xij | El valor de la variable j en la observación i. Una celda | DATO |
| xi | La fila i completa: un objeto descrito por sus p atributos | DATO |
| yi | El valor real del target para la observación i | DATO CUÁL COLUMNA, TÚ |
| ŷi | Lo que el modelo predice para esa fila. El sombrero significa «estimado» | SALIDA |
| f̂ | La regla que mapea una fila a una predicción | LO APRENDE EL MODELO |
Camino inverso: te dan los símbolos, reconstruye el fenómeno
Te entregan solo esto, sin contexto: n = 6.336, p = 23,
y continuo en AUD, y ŷi = f̂(xi1,…,xi,23).
Tu pregunta: ¿qué es una fila aquí, qué cuenta p, y qué es
y? Escríbelo antes de abrir.
Respuesta correcta y cómo se resuelve
Respuesta: una fila es una venta de 2016, p = 23 son las
columnas numéricas que entran al modelo después del encoding (no 23 variables), e
y es el precio de venta en AUD.
- Una fila = una venta de una propiedad. Ojo: no una propiedad. Si la misma casa se vendió dos veces, son dos filas. El objeto medido es el evento venta.
- n = 6.336 son las ventas de 2016, tu conjunto de entrenamiento. Las de 2017 son 7.244 y forman otra matriz.
- p = 23 son las columnas numéricas que entran al modelo después del encoding — no las variables conceptuales. Eso se desarma en la sección 6.
- y =
Price, en dólares australianos. En el modelo final se entrena sobrelog1p(Price), que sigue siendo el mismo target en otra escala.
Error típico: leer p = 23 como «23 variables» (son 12
conceptuales, sección 6) y decir que una fila es «una casa» (una casa vendida dos
veces son dos filas).
[FUENTE · Repo: 09_RESULTADOS/resultados_temporal.json y 03_SCRIPTS/modelamiento_temporal.py]
5 · Cuando una fila no es lo que parece
La pregunta «¿qué es una fila?» parece trivial hasta que te topas con datos industriales de verdad. En tu propio curso pasó, con el dataset de flotación minera del Proyecto 1:
n, y cualquier promedio que calcules está promediando cosas que no
sabes qué son.
Nota también cómo el grupo ordenó sus variables: las agruparon en variables
de alimentación, de operación y de concentrado. Agrupar las
features por su rol en el proceso físico es una buena costumbre — y en flotación
tiene una consecuencia directa: las variables «de concentrado» se miden
al final del proceso, igual que el target. Usarlas para predecir el
sílice del concentrado es la misma trampa que la Hora_alta del
ejercicio de la sección 2.
[INFERENCIA] La agrupación la dijo el grupo. La advertencia sobre las variables de concentrado es razonamiento de Datito a partir del mecanismo, no algo que el profesor haya dicho ese día. El mecanismo tiene nombre: fuga de información, sección 9.
6 · Columna ≠ variable: 12 se convierten en 23
Acá hay una trampa que solo se ve con tus propios datos. Tu modelo de Melbourne usa 12 variables conceptuales:
| Grupo | Variables | Cuenta |
|---|---|---|
NUM |
Rooms · Distance · Bedroom2 · Bathroom · Car · Landsize · Lattitude · Longtitude · Propertycount |
9 |
CAT |
Type · Method · Regionname |
3 |
| Variables conceptuales | 12 | |
Pero el CSV que entra al modelo tiene 23 columnas de features. ¿De dónde salen las 11 extra?
| Origen | Qué pasó | Columnas |
|---|---|---|
| 9 numéricas | Pasan tal cual | 9 |
Car tenía faltantes | Se imputó la mediana y se agregó Car_missing, que marca dónde se imputó | +1 |
Type (3 valores) | One-hot → Type_h · Type_t · Type_u | +3 |
Method (5 valores) | One-hot → Method_PI · S · SA · SP · VB | +5 |
Regionname (5 valores) | One-hot → 5 columnas Regionname_* | +5 |
| Total p | 23 | |
[FUENTE · Repo: encabezado de 02_DATOS/housing_dashai_2016_2017.csv y el ColumnTransformer de 03_SCRIPTS/modelamiento_temporal.py]
Y por eso
Suburb quedó fuera. Melbourne tiene 311 suburbios:
meterlo como feature habría sumado 311 columnas de golpe, pasando de p = 23 a
p = 334. Eso es lo que estás por mover en la sección siguiente.
[FUENTE · Repo: 01_DOCUMENTACION/01_CERTAMEN2/02_MAPA_PROCESO_ESTUDIO.md, ficha P3: «Suburb descartado por 311 categorías = sobreajuste»]
Por qué una categórica se abre en k columnas y no en una
La lámina oficial clasifica las variables en dos familias: cuantitativas (discretas, como número de hermanos; continuas, como temperatura) y categóricas, «sin orden inherente entre los valores», como el tipo de mascota [FUENTE · Repo: 05_CLASES/11_PRESENTACIÓN/_markdown/FCD-2026-2_04_CalidadDeDatos.md · lámina 20]. Esa falta de orden es justo lo que hay que conservar al pasarla a números.
Por eso Type no se codifica como h=1, t=2, u=3 sino como tres
columnas 0/1 (one-hot): con un solo número, el modelo creería que una
unidad es «tres veces» una casa. La ayudantía del 7-ago dio la misma advertencia
desde el otro lado: el LabelEncoder (0, 1, 2, 3…) crea un orden
artificial, y se aconseja usarlo solo en la variable objetivo
[FUENTE · Repo: 05_CLASES/transcripciones/2026-08-07T23_57_03Z_Fundamentos_en_Ciencia_de_Datos.md · 0:38:16–0:39:36] · ayudantía: no es materia de certamen.
Y la trampa inversa: no todo lo que tiene nombres es categórico. En la clase de clasificación un compañero propuso «adulto joven / adulto mayor» como ejemplo de categoría, y el profesor lo corrigió:
Salida categórica («bueno / regular / malo») ≠ salida numérica
Lo que fija el tipo de modelo es el target, no las entradas. Y «bueno / regular / malo» tiene orden, igual que «adulto joven / adulto mayor»: es la trampa del orden. Análisis completo en certamen_1.html#p6.
7 · Más filas no es lo mismo que más columnas
Esta es la distinción que tu profesor evaluó directamente en el Certamen 2, pregunta 3. Es fácil de decir y difícil de sentir, así que acá se mueve.
Respuesta correcta y cómo se resuelve
Respuesta: sube. Con n fijo, agregar columnas —aunque sean puro ruido— sube el R² de entrenamiento; lo que baja es el R² en datos nuevos.
Cómo se resuelve, con las fórmulas del panel (n = 6.336, ρ = 0,76):
| p = 23 | p = 123 (+100 de ruido) | |
|---|---|---|
| R² train = 1 − 0,24·(1 − p/n) | 0,7609 | 0,7647 ↑ |
| R² test = 0,76 − 0,24·p/(n − p) | 0,7591 | 0,7552 ↓ |
| Brecha | 0,0017 | 0,0094 |
Cada columna extra le da al modelo un grado de libertad más para calzar las filas que ya vio. El ruido no se repite en filas nuevas, así que ese ajuste extra no se traslada: la brecha crece.
Error típico: «queda igual, porque el ruido no aporta nada». Confunde señal con libertad: el ruido no aporta señal, pero sí flexibilidad. Es la trampa de la P3 del Certamen 2 (certamen_2.html#p3).
[DATITO] simulación de mínimos cuadrados de esta sección; cifras ilustrativas, no una corrida de tu modelo.
Qué está calculando el gráfico.
Es el resultado clásico de mínimos cuadrados: agregar columnas sin señal infla el
ajuste en entrenamiento en proporción a p/n, y lo castiga fuera.
R²test ≈ ρ − (1−ρ)·p/(n−p)
Con ρ = 0,76, la fracción del
precio que de verdad se puede explicar — el R² que efectivamente alcanzaste en
2017. Cuando p/n → 0 las dos expresiones colapsan en ρ: sin columnas
de sobra, entrenamiento y test coinciden.
[DATITO] Simulación del mecanismo,
no una corrida de tu modelo. Sirve para ver la forma de la curva; los números
exactos de tu proyecto están en 09_RESULTADOS/resultados_temporal.json.
- Mueve n hacia arriba con p fijo → las dos curvas se juntan. Más filas reducen el sobreajuste.
- Mueve p hacia arriba con n fijo → la azul sube, la roja se desploma. Más columnas sin señal lo aumentan.
- Lo que manda no es n ni p por separado, sino n/p: cuánta evidencia tienes por cada cosa que el modelo debe estimar.
Suburb dentro serían 6.336 / 334 = 19, y la brecha simulada
pasa de 0,002 a 0,026: se multiplica por trece, pero sigue siendo chica.
Prueba los dos botones y compruébalo.
Suburb, si el panel dice que 334
columnas con 6.336 filas se aguantan? Porque el conteo de columnas no es el
mecanismo completo. Con 311 categorías, muchos suburbios aportan un puñado
de ventas cada uno: el modelo estima un efecto por suburbio con casi nada de
evidencia detrás. Y peor: el 29,1 % de las ventas de 2017 ocurre en
suburbios que no existen en 2016, así que esas columnas simplemente no tienen
valor cuando más las necesitas.Quédate con la forma del argumento: n/p te dice si hay holgura en promedio; no te dice si la hay donde importa. Eso último ya es
generalización, y se trabaja allá.
[FUENTE · Repo: 09_RESULTADOS/resultados_temporal.json · [INFERENCIA] la conexión entre ambos mecanismos es razonamiento de Datito]
07_DATITO/errores_conceptuales.yaml, error sobreajuste_como_etiqueta_de_toda_degradacion]
8 · Tus ocho columnas excluidas
Tu modelo de Melbourne descarta ocho columnas que sí existen en el CSV original y contienen información real:
| Columna | Por qué quedó fuera | Tipo de razón |
|---|---|---|
Address | Es casi un identificador: valor único por fila | Identifica, no mide |
Suburb | 311 categorías → 311 columnas | Dimensión |
Postcode | Misma información geográfica, ya cubierta por lat/long y Regionname | Redundante |
CouncilArea | 0 % de nulos en 2016 y 18,9 % en 2017, más 14 categorías que no existen en 2016. Con ella el error bajaba 599 AUD (0,38 %), y aun así se conservó el modelo sin ella | No sobrevive al cambio de año |
SellerG | Corredoras que aparecen en 2016 y no en 2017 | No sobrevive al cambio de año |
BuildingArea | Demasiados faltantes | Calidad |
YearBuilt | Demasiados faltantes | Calidad |
Date | — | — |
[FUENTE · Repo: lista EXCLUIDAS de 03_SCRIPTS/modelamiento_temporal.py. Las razones de Suburb, de las de calidad y de CouncilArea están documentadas (CouncilArea: 07_DATITO/02_REFERENCIA/material.md y 09_RESULTADOS/experimento_councilarea_2026-09-18.json); la de Postcode es [INFERENCIA] a partir del código.]
Date quedó en blanco a propósito.Esa es tu pregunta de diagnóstico: si
Date es una columna con información real sobre cada venta,
¿por qué quedó excluida de las features?Está planteada como ejercicio al final de la sección 9, con criterios de corrección y la respuesta oculta. Escribe la tuya antes de abrirla.
9 · Fuga de información: la columna que ya sabe la respuesta
Ya separaste cinco palabras. Falta la sexta, la que hace que un modelo inútil se vea excelente. Primero las seis, lado a lado:
| Palabra | Qué es | La pregunta que la detecta | En Melbourne | ¿Entra al modelo? |
|---|---|---|---|---|
| Fila | Un objeto o evento medido | ¿Qué estamos midiendo? | Una venta | Es la unidad: cada fila es un ejemplo |
| Columna | Una variable o atributo medido en cada fila | ¿Cuáles son las variables? | Rooms, Date, Price… | Candidata, nada más |
| Identificador | Distingue filas; no mide nada | ¿Solo sirve para encontrar la fila? | Address (casi un ID) | No. Se guarda aparte para rastrear errores |
| Target | La columna que decidiste predecir | ¿Qué quiero predecir? | Price | Nunca como entrada: es la salida |
| Feature | Columna que usas para predecir | ¿Existe al predecir y no sale del target? | Rooms, Distance | Sí, las que elijas |
| Fuga | Una feature que trae el target adentro, o que viene del futuro | ¿La tendría en la mano en el momento de predecir? ¿Se calcula desde el target? | Pregunta abierta: ver el ejercicio de Date más abajo | Jamás |
Hay dos formas, y conviene nombrarlas por separado [DATITO]:
- Por construcción. La feature y el target salen del mismo cálculo. Aprobado/reprobado se calcula desde la nota; si la nota es feature, el modelo copia el umbral.
- Temporal. La feature es verdadera, pero se conoce después del
momento de predecir. La
Hora_altadel ejercicio de urgencias; las variables de concentrado de la planta de flotación.
El profesor la detectó en vivo en las presentaciones del 14-ago. Un grupo quería predecir el valor de una canasta de productos con datos por región, y él les preguntó si iban a usar los datos de hoy para predecir el valor de hoy [FUENTE · Repo: 05_CLASES/transcripciones/2026-08-14T22_09_23Z_Fundamentos_en_Ciencia_de_Datos.md · 0:25:40–0:25:53]. Al cerrar, les dejó esto:
Las dos formas están en esa frase: «ya tienes el valor de hoy» es la temporal (predices algo que ya conoces), y «se calcula directamente desde las variables» es la de construcción. Fíjate además en que no lo afirma: justo después aclara que no lo sabe y que por eso importa saber cómo se calcula ese valor dentro del dataset. Sospechar fuga obliga a revisar cómo se construyó cada columna, no a declararla.
El caso real: Galaxy Zoo
El train del desafío tiene 1.000 filas × 90 columnas; el test, 10.000 × 86.
Las cuatro que están solo en train son objID, p_cs,
p_el y label. p_cs y p_el son las
fracciones de voto de los clasificadores humanos (espiral y elíptica), y son
muy informativas.
[FUENTE · Repo: 08_PROYECTO_FCD/Desafio/REPORT.md, §2 · 07_DATITO/02_REFERENCIA/material.md, Galaxy Zoo]
p_cs y p_el como
features y evalúas con validación cruzada dentro del train, ¿qué F1
obtienes?Respuesta correcta y cómo se resuelve
Respuesta: casi perfecto en la validación dentro del train, porque
el label se construyó desde p_cs y p_el; y
sobre el test el modelo no se puede ni ejecutar, porque esas columnas no están.
- Pregunta de dónde sale el target: el
labelresume la votación humana. - Las features
p_csyp_elson esa votación. Una regla de una línea reproduce ellabelen 998 de 1.000 filas (panel de abajo). - En la validación cruzada dentro del train las dos columnas están en todos los folds, así que el F1 sale casi perfecto.
- El test tiene 86 columnas y no incluye esas dos: el modelo no corre.
Error típico: quedarse con «son muy informativas, entonces sirven». Lo informativo que es una columna no dice nada sobre si existe al predecir ni sobre si viene del target.
[FUENTE · Repo: 08_PROYECTO_FCD/Desafio/REPORT.md, §2 y §3.1]
Lo que encontró la auditoría del proyecto: una
regla de una línea, sin ningún modelo, reproduce el label.
label = 1 si p_cs ≥ 0,5 label = 2 si p_el ≥ 0,5 label = 0 en otro caso → coincide en 998 de 1.000 filas (99,8 %)
Las 2 discrepancias son empates exactos
p_cs = p_el = 0,5. p_cs y p_el no están en el
test, así que un modelo que las use ni siquiera puede ejecutarse sobre las
10.000 filas a predecir.
[FUENTE · Repo: 08_PROYECTO_FCD/Desafio/REPORT.md, §3.1]
Ejercicio de interpretación · ¿Qué significa ese 99,8 %?
Una regla trivial acierta el label en 998 de 1.000 galaxias.
Escribe en dos o tres líneas qué te dice ese número sobre p_cs y
p_el, y qué no te dice sobre la dificultad del problema.
Respuesta correcta y cómo se resuelve
Respuesta: el 99,8 % dice que p_cs y p_el son
el target escrito de otra forma (fuga por construcción); no dice nada sobre qué
tan difícil es predecir el label con las columnas que sí existen en
el test.
Cómo se resuelve: una regla sin aprendizaje que acierta casi todo significa que la respuesta ya estaba en las columnas usadas. Entonces la pregunta no es «qué buen número», sino «de dónde salen esas columnas».
No es un logro de nadie: dice que p_cs y p_el son
el target escrito de otra forma. El label se construyó desde
los votos, así que esas columnas son fuga por construcción. Un modelo con ellas
aprendería la regla con que se armó la etiqueta, no a reconocer galaxias desde
la fotometría, que es lo único que hay en el test.
Lo que no dice: nada sobre qué tan difícil es predecir el
label con las columnas que sí existen al predecir. Ese número hay
que medirlo sin ellas. Y deja al descubierto algo sobre la clase 0: es «ningún
bando alcanzó mayoría», un estado de la votación, no un tipo de galaxia.
Error típico: leer el 99,8 % como «el problema es fácil» o como la exactitud esperable de un modelo. Es la exactitud de copiar la respuesta.
[FUENTE · Repo: 08_PROYECTO_FCD/Desafio/REPORT.md, §3.1] · redacción [DATITO]
Ejercicio · Melbourne y la columna Date
Tu split es temporal: entrenas con las ventas de 2016 (6.336) y evalúas con las de 2017 (7.244).
Date es información real sobre cada venta y quedó
fuera de las features. En 4 a 6 líneas: ¿por qué? Y decide si es un caso
de fuga, de otra cosa, o de ninguna. No asumas que es fuga por estar en esta
sección.
Criterios de corrección (no es la respuesta)
- Fija el momento de la predicción: cuándo se usaría el modelo y qué se sabe en ese momento.
- Separa dos preguntas y no las mezcla: ¿Date existe al predecir? y ¿el modelo puede aprender algo útil de Date con este split?
- Dice qué rango de fechas ve el modelo en train, qué rango le llega en test, y qué hace un modelo con valores que nunca vio (generalizacion.html).
- Menciona qué papel ya cumple
Dateen tu proyecto (train_validation_test.html). - Cierra con una etiqueta justificada, no con «porque no sirve».
Escríbela antes de abrir la respuesta, y llévala a Datito: es la pregunta con que abre este concepto.
[FUENTE · Repo: 07_DATITO/curriculum.yaml, pregunta_diagnostico de datos_features_target] · criterios [DATITO]
Respuesta correcta y cómo se resuelve
Respuesta: Date quedó fuera porque es la columna que
define la partición: todas las fechas de train son de 2016 y todas las de
test son de 2017, fuera del rango que el modelo vio. No es fuga; es un problema de
extrapolación: el modelo no puede aprender de esa columna nada que valga para
2017.
- Momento de la predicción. Al tasar una venta sabes su fecha, así que
Datesí existe al predecir y no viene del precio. Por ese lado no es fuga. - Papel de Date en el proyecto. El código convierte
Dateen año y parte con él: train = 2016, test = 2017.Datees el criterio de la partición. - Qué vería el modelo. En train, solo fechas de 2016; en test, solo fechas posteriores a todas las que vio. El año sería constante dentro de cada conjunto: cero información para aprender.
- Qué haría con eso. Un modelo de árboles como HistGradientBoosting no extrapola: a cualquier fecha de 2017 la trata como «las últimas fechas de 2016». Lo único que podría aprender son patrones propios de 2016, que no tienen por qué repetirse (ver generalizacion.html).
- Etiqueta: extrapolación temporal, no fuga. Un derivado como el mes de venta sí podría evaluarse como feature (estacionalidad), porque sus valores se repiten entre años.
Error típico: responder «porque es fuga de información» sin mostrar que venga del target o del futuro (no viene de ninguno), o «porque no sirve» sin decir por qué. El otro error: creer que una columna con información real tiene que ser feature.
[FUENTE · Repo: 03_SCRIPTS/modelamiento_temporal.py, líneas 33–36
(año desde Date y partición 2016/2017) y lista EXCLUIDAS]
· el porqué es [INFERENCIA] a partir del código: el proyecto no documenta la razón
de esta exclusión en particular · lo del mes, [INFERENCIA].
Transferencia · agricultura
id_potrero, variedad, fecha_siembra,
kg_fertilizante_ha, superficie_ha,
lluvia_total_temporada, humedad_grano_cosecha,
ton_cosechadas, rendimiento_ton_ha.Clasifica cada columna: identificador, target, feature válida o fuga (y de qué forma). Después: ¿cambia algo si el modelo se usa a mitad de temporada, en noviembre?
Respuesta correcta y cómo se resuelve
Respuesta: id_potrero es el ID y
rendimiento_ton_ha el target; ton_cosechadas es fuga por
construcción; humedad_grano_cosecha y
lluvia_total_temporada son fuga temporal; el resto son features
válidas. En noviembre la lluvia acumulada hasta noviembre pasa a ser
válida, pero no la de toda la temporada.
Cómo se resuelve: fija el momento de predecir (la siembra) y pasa cada columna por dos preguntas: ¿se calcula desde el target? y ¿la tendría ese día?
- Identificador:
id_potrero. - Target:
rendimiento_ton_ha. - Fuga por construcción:
ton_cosechadas. El rendimiento es toneladas cosechadas divididas por superficie: con esa columna ysuperficie_ha, el modelo reconstruye el target con una división. - Fuga temporal:
humedad_grano_cosecha(se mide en la cosecha) ylluvia_total_temporada(el día de la siembra no ha llovido nada de esa temporada). - Features válidas:
variedad,fecha_siembra,superficie_haykg_fertilizante_ha, si el fertilizante se decide antes de sembrar.
En noviembre cambia la lluvia: ya existe la lluvia acumulada hasta noviembre, que sí es feature válida, pero no la de toda la temporada. Habría que construir una columna nueva, «lluvia hasta la fecha de predicción».
Lo que transfiere: la fuga no es una propiedad de la columna sola, sino de la columna más el momento en que predices. La misma lluvia es fuga en septiembre y feature en noviembre, si la cortas bien.
Error típico: aceptar lluvia_total_temporada «porque la
lluvia no depende del rendimiento». No viene del target, pero viene del futuro:
también es fuga.
[DATITO] Caso construido para este artefacto; no hay cifras.
10 · La distinción de certamen
Fila = objeto o evento medido ≠ columna = variable o atributo
Te dan una tabla mal estructurada y tienes que nombrar las variables y decir qué se está midiendo. Se castiga responder «las variables son las columnas» cuando una sola columna tiene tres variables adentro. Ver certamen_1.html#p9a · certamen_1.html#p9b.
Tipo de la salida ≠ tipo de las entradas
El tipo de modelo lo fija el target. Está desarrollada en la sección 6 y en certamen_1.html#p6.
Más filas (reduce el sobreajuste) ≠ más columnas (lo aumenta si no traen señal)
La afirmación trampa invierte la relación entre evidencia y parámetros. La sección 7 es exactamente esta pregunta, con deslizadores. Ver certamen_2.html#p3.
[FUENTE · Repo: 07_DATITO/06_AUDITORIAS/patron_evaluacion.md y
01_DOCUMENTACION/06_CERTAMEN1/00_LEEME.md]
11 · Procedimiento para el papel
Sin computador, con una tabla impresa al frente. Los tres primeros pasos son literalmente el método de tu profesor.
- ¿Qué objeto o evento estamos midiendo? Escríbelo como frase completa («el consumo de un camión en un día»), no como sustantivo suelto («camiones»). Eso define qué es una fila.
- ¿Cuáles son las variables? Enumérralas. Si una columna contiene dos cosas distintas, cuéntalas como dos variables aunque compartan columna.
- ¿Cada fila tiene un identificador único? Si se repite, todavía no sabes qué es una fila. Vuelve al paso 1.
- ¿Qué quiero predecir? Esa columna es
y. Si la pregunta no está enunciada, dilo: es una decisión, no un hallazgo. - Las demás son candidatas a
X. Candidatas, no features. - Descarta: las que solo identifican, las que no existirán al momento de predecir, las que se calculan desde el target, y las que definen cómo partiste los datos. Para cada candidata pregunta: ¿la tendría en la mano el día que uso el modelo?
- Cuenta n y p, y mira la razón n/p. Si p creció por one-hot, cuenta las columnas resultantes, no las variables.
12 · Errores que el formato castiga
- Nombrar el objeto medido como sustantivo suelto. «Camiones» no es la respuesta; «el consumo de un camión en un día» sí. La unidad de observación casi siempre tiene dos o tres calificadores.
- Decir que las variables son las columnas cuando la tabla está mal estructurada. Esa es justo la pregunta.
- Confundir más filas con más columnas al hablar de sobreajuste. Es la trampa explícita de la P3.
- Meter el identificador como feature. El modelo memoriza y el número se ve bien.
- Tratar el target como propiedad de la columna en vez de como decisión derivada de la pregunta.
- Contar p antes del encoding. 12 variables y 23 columnas no son lo mismo, y la diferencia importa justo cuando se discute sobreajuste.
- Usar una columna que no existe al momento de predecir. Fuga de información. Se ve como un modelo excelente y es un modelo inútil.
- Usar una columna que se calcula desde el target. La otra fuga. La nota
para predecir aprobado/reprobado;
p_csyp_elpara predecir ellabelde Galaxy Zoo. - Codificar una categórica como 1, 2, 3. Le inventas un orden que no existe. Y al revés: tratar como «sin orden» una variable discretizada (adulto joven / adulto mayor) que sí lo tiene.
- Presentar una inferencia como hallazgo. Si un valor es atípico, dilo así: es atípico. Afirmar «hay una falla de sensor» sin evidencia es [INFERENCIA] disfrazada de dato, y tu profesor lo distingue —la ficha P11 del Certamen 2 evalúa exactamente separar lo medido de lo supuesto de lo no disponible.
Antes de cerrar
Inventario forestal. Cuadrillas recorren un predio y en cada parcela miden todos los árboles: especie, diámetro a la altura del pecho, altura, estado sanitario. Además anotan de la parcela: pendiente, altitud y tipo de suelo. Quieren estimar el volumen de madera aprovechable por hectárea.
¿Qué es una fila: un árbol o una parcela? ¿Y qué le pasa a las variables del otro nivel según cuál elijas?
Respuesta correcta y cómo se resuelve
Respuesta: una fila es una parcela, porque el target (volumen por hectárea) es una propiedad de la parcela; las variables de cada árbol hay que resumirlas por parcela, y si eligieras el árbol como fila las variables de parcela se repetirían en todos sus árboles.
Cómo se resuelve:
La pregunta decide la fila. El target es volumen por hectárea, que es una propiedad de la parcela, no de un árbol. Entonces una fila es una parcela.
Y eso obliga a mover de nivel las variables del árbol: especie,
diámetro y altura no caben tal cual en una fila-parcela,
porque hay muchos árboles por parcela. Hay que agregarlas: diámetro medio,
altura máxima, número de árboles, proporción de cada especie, porcentaje de
árboles sanos. Las variables de la parcela —pendiente, altitud, suelo— entran
directas.
Si en cambio eligieras el árbol como fila, las variables de parcela se repetirían idénticas en todas las filas de esa parcela, y tus filas dejarían de ser independientes entre sí. Se puede hacer, pero ya no es la misma pregunta.
Lo que transfiere: el nivel del target fija el nivel de la fila, y todo lo que está en otro nivel hay que subirlo o bajarlo. Es el mismo problema que los timestamps repetidos de la planta de flotación en la sección 5.
Error típico: elegir el árbol como fila «porque es lo que se midió» y poner el volumen por hectárea de la parcela como target de cada árbol: el mismo target repetido en muchas filas que no son independientes.
[DATITO] Caso construido para este artefacto. Dominio elegido a propósito fuera de Melbourne y de minería.
Cierre de la Clase 2 · Datos, filas, columnas, features y target
Qué aprendiste
- Cada fila es una observación y cada columna una variable; qué es una fila se decide antes de modelar.
- El target es una decisión tuya, no una propiedad de la columna.
- Un identificador sirve para rastrear errores, no para predecir.
- Fuga de información: usar una columna que no existirá cuando haya que predecir.
Qué no debes confundir
- Más filas ≠ más columnas (C2 P3).
- Variable categórica sin orden ≠ numérica discretizada, que conserva el orden (C1 P6).
- Dato ≠ información: la información son datos en un contexto.
Procedimiento para el papel
- Define qué es una fila.
- Marca el target: lo que quieres predecir.
- Para cada columna: ¿existirá al momento de predecir? Si no, es fuga.
- Separa los identificadores y clasifica el resto por tipo.
Viene de: Clase 1 · ¿Qué problema resuelve la ciencia de datos? · Sigue: Clase 3 · EDA: conocer los datos antes de modelar
Vuelve a tu activación: En Galaxy Zoo, las columnas p_el y p_cs predicen casi perfecto la clase de cada galaxia. ¿Por qué no se pueden usar para entrenar? ¿Cambiarías tu respuesta?
Respuesta correcta y cómo se resuelve
No: ese monto se conoce después de la compra. Usarla es fuga de información: el modelo se vería excelente al validar y fallaría al predecir de verdad. [DATITO]
El cierre es una síntesis de la clase [DATITO]: cada afirmación tiene su fuente en el cuerpo de este visual. Fuente del cierre: 07_DATITO/clases.yaml.