La receta de datos,
línea a línea

Unas líneas que escribes tú para decir qué relación tienen tus columnas con lo que quieres predecir. El core las lee, etiqueta con ellas cada fila que genera, y te devuelve la regla que aplicó y una huella de los datos.

label:ANDORDEFAULTNOISEBALANCE#

Las capturas están en inglés. Se tomaron conduciendo la aplicación con la interfaz en ese idioma, y los rótulos que este manual cita —Build model, Save, los nombres de las fases— son los de esas imágenes. La aplicación habla también español: si la usas así verás esos mismos botones traducidos, y lo que hace cada uno es lo que cuenta este texto.

Léelo antes

Todas las capturas de esta página salen de una sesión real, conducida de la primera pantalla a la última. Aquí no hay ninguna maqueta.

El modelo se construyó con una frase que llevaba dentro sus rangos, así que los números se pueden comprobar: debt_euros va de 0 a 500.000 euros y age_years de 18 a 95. Y la receta no se tecleó: es el ejemplo que el propio producto escribe con tus columnas y que entra en la caja de una pulsación. Por eso sus umbrales son 350.000 y 41.

Dónde está esta pantalla

La caja está en la fase 2, Data, bajo GENERATE DATA WITH THE CORE — encima del botón, para que lo que dice sobre generar sin ella se lea antes de pulsar y no después de entrenar. El Workbench tiene la misma caja en la vista Data del modelo: mismo lenguaje, mismos textos, mismo core. Una versión corta de este manual viaja también dentro del producto, plegada bajo How to write a recipe, justo al lado de la caja.

01Por qué existe

Sin receta, el objetivo se sortea

Las filas generadas sacaban su respuesta de una moneda al aire, y eso está medido, no intuido. Con 400 filas, cualquier correlación por debajo de 0,098 es indistinguible del azar. La correlación más alta entre cualquier columna de entrada y el objetivo era 0,049 en un objetivo binario y 0,054 en uno continuo. Ahí dentro no había nada que aprender.

La consecuencia le caía a quien acababa de instalar el Studio: generar datos, entrenar y leer un 50 % de acierto. El producto lo informaba con honestidad — y cualquiera que lo mirara concluía que el producto no funciona.

Con receta, ese mismo recorrido —una frase, 200 filas generadas y una regla con un 8 % de ruido declarado— entrenó hasta un 87,5 % de acierto. Medido de punta a punta el 2026-08-18, conduciendo la aplicación.

Una receta no necesita LLM. Se analiza y se evalúa de forma determinista, fila a fila, en Python: no hay ninguna llamada a un modelo por medio ni aunque tengas un proveedor configurado. De eso iba justamente el arreglo — un Studio recién instalado y sin clave tiene que poder producir un dataset que se pueda aprender.
Fase 2, Data: la caja de la receta con su ayuda, el aviso de generar sin receta y el botón Generate data
La caja, antes de generar nada. La línea de ayuda de arriba ya dice las dos cosas que rompen más recetas: una línea por resultado, y los números en las unidades de tus datos. Debajo, en ámbar, lo que pasa si la dejas vacía.
02El lenguaje

La forma de una receta

Una receta para un objetivo con clases es una lista de líneas de regla y un DEFAULT. Ésta es con la que se generó la tercera captura de esta página:

# the first matching line wins
1: debt_euros > 350000 AND age_years > 41
DEFAULT: 0
NOISE: 0.08
BALANCE: 1=0.3, 0=0.7
  • Cada línea de regla es etiqueta: condición. La etiqueta es un nombre (ALTO, BAJO) o un número (1, 0) — se admiten los dos, porque las etiquetas de un objetivo binario no son identificadores. Tiene que ser una de las que declara tu modelo.
  • Se lee de arriba abajo y gana la primera línea que se cumple. Una fila que se lleva una línea de arriba no se le ofrece nunca a una de abajo, así que el orden de tus líneas forma parte de lo que dicen.
  • DEFAULT: es lo que se llevan todas las demás filas. Es obligatorio — una receta sin él, o con un `DEFAULT` que nombra una etiqueta que el modelo no tiene, se rechaza.
  • Tienen que quedar alcanzables al menos dos etiquetas distintas entre tus reglas y el DEFAULT. Un solo resultado para todo no es una regla, es una constante, y se rechaza como tal.
  • Las líneas que empiezan por # son comentarios.
El analizador es tolerante a propósito —esto lo escribe una persona— y una línea que no entiende se la salta mientras el resto de la receta sigue funcionando. Esa tolerancia tiene un precio que conviene saber: una errata no detiene nada, simplemente deja de contar sin decirlo. Por eso la pantalla te devuelve la regla que aplicó de verdad, y por eso merece la pena leerla.
03El lenguaje

Qué puede decir una condición — y qué no

Una condición es exactamente columna OPERADOR número, y los operadores son <, <=, >, >=, == y =. Los dos últimos significan lo mismo y comparan con una tolerancia de 1e-9, así que una igualdad sobre una columna con decimales se comporta como esperarías.

Cuatro cosas que no puede hacer, y ninguna avisa a gritos:

  • comparar dos columnas — a la derecha va un número, siempre;
  • usar paréntesis, ni ninguna cuenta dentro de la condición;
  • nombrar una columna que el modelo no tiene — ésa sí se detecta y se informa;
  • mezclar AND y OR en la misma línea.

La última es la que pilla a todo el mundo, así que conviene decirla sin rodeos: una línea con los dos conectores se descarta entera. El analizador no se inventa una precedencia que nadie le ha dicho, y tampoco protesta — la línea sencillamente ya no está. Escribe dos líneas y deja que el orden haga el trabajo:

# not this — the whole line is dropped
1: debt_euros > 350000 AND age_years > 41 OR age_years < 25

# this — first match wins, so the order is the precedence
1: age_years < 25
1: debt_euros > 350000 AND age_years > 41
DEFAULT: 0
04La que rompe recetas

Los números van en las unidades de tus datos

Escribe debt_euros > 350000, no debt_euros > 0.7. Euros, años, grados, milímetros — lo que mida esa columna. Éste es el error que rompe más recetas que todas las demás reglas de esta página juntas, y el ejemplo del propio producto llegó a cometerlo.

Es tan fácil de cometer porque el core muestrea las filas internamente en una escala normalizada de 0 a 1, y convierte tu umbral a ella con el rango de esa columna. Lo que a propósito NO hace es recortarlo: un umbral fuera del rango se queda fuera, de modo que la condición no se cumple nunca —que es lo correcto— en vez de que alguien la empuje al borde y quede a medio funcionar.

Así que debt_euros > 0.6 sobre una columna que va de 0 a 500.000 se cumple en todas y cada una de las filas. Todas se llevan la misma etiqueta, la receta es perfectamente válida y completamente inútil, y el core se da cuenta: se pasa a etiquetas al azar y lo dice.

Dos fallos, dos mensajes distintos, y la diferencia importa. Si la receta no se pudo leer, el consejo es the columns and values must exist in the model. Si se leyó y no separó nada, el consejo apunta a los umbrales — porque tus columnas estaban bien, y mandarte a revisarlas sería mandarte a revisar lo que ya estaba correcto.
05Que se sostenga

NOISE — las filas que te llevan la contraria a propósito

NOISE: 0.1

Una de cada diez filas no sigue la regla. Es una proporción entre 0 y 1, no una desviación, y se escribe así porque se explica en una frase y vale igual para dos clases que para cinco. RUIDO también se acepta; NOISE es la forma canónica, como DEFAULT, AND y OR.

  • Por qué existe: una regla determinista sin ruido produce un dataset perfectamente separable, y el modelo entrena hasta cerca del 100 % de acierto. Funciona, y es exactamente el número que no sobrevive a enseñárselo a alguien técnico.
  • La fila que contradice nunca se queda con su propia etiqueta. Cuando la alternativa podía incluir la que la regla ya había elegido, la mitad de los cambios no cambiaban nada y un 10 % declarado salía como un 6,5 % — medido. Una receta que declara un 10 % y entrega un 6,5 % es una receta que miente, y esta receta se publica con el modelo.
  • Un valor fuera de 0 a 1 se ignora, no se rechaza. El resto de la receta sigue funcionando, en la misma línea que el resto del analizador.
06Que se sostenga

BALANCE — pedir el reparto que quieres

BALANCE: 1=0.3, 0=0.7

Que el treinta por ciento de las filas sean de clase 1. 1=30% vale igual, y REPARTO se acepta como sinónimo. Sin esta línea, el reparto es el que salga de la regla y de los rangos.

Y eso importa más de lo que parece. En la vida real el impago, el fallo y el reingreso son minoría, y ser minoría es justo lo que los hace difíciles de aprender. Un dataset donde la clase rara no es rara enseña un problema que no tiene nadie.

Cómo se consigue el reparto forma parte de la promesa. Las filas no se reetiquetan — eso rompería la regla, y el dataset dejaría de obedecer a su propia receta. Las filas que sobran se vuelven a sortear, una y otra vez, hasta que la regla por sí sola dé el reparto que pediste. Y si no se llega, se declara en vez de perderse por el camino.

07El lenguaje

Cuando lo que se predice es una cantidad

Una regla con etiquetas no sirve para un objetivo continuo: no hay etiqueta que elegir, hay una cantidad que calcular. Así que la receta pasa a ser una expresión.

usage = 0.05*sqm + 1.2*people + 5
NOISE: 0.1
  • A la izquierda del = va el objetivo. A la derecha, una suma de términos coeficiente*columna y una constante. Un término sin coeficiente cuenta como 1, y el signo es del término.
  • Ésa es toda la gramática: ni funciones, ni condicionales por tramos, ni interacciones. El alcance se cerró a propósito — todo lo demás hacía crecer el evaluador sin final a la vista.
  • Los coeficientes se escriben en la escala de tu dominio, igual que los umbrales de una regla de clases.
NOISE significa aquí otra cosa, y conviene decirlo en voz alta: a un objetivo continuo no se le puede «llevar la contraria», se desvía. NOISE: 0.1 mueve cada valor hasta un 10 % del recorrido que el objetivo ocupa de verdad. Sin él la regresión sale perfecta, y un R² de 1,000 tampoco sobrevive a una segunda mirada.

Antes de que esto existiera, un objetivo continuo se rellenaba con un sorteo uniforme entre sus límites —ruido puro, correlación 0,054—, así que un modelo de regresión no tenía hacia dónde converger.

08Lo que devuelve

La pantalla dice lo que PASÓ, no lo que pediste

Generar no te entrega solo filas. Al lado de los datos sale la regla que el core aplicó de verdad, quién la escribió, la huella del dataset y cualquier aviso que levantara.

Después de generar: la regla aplicada a estos datos, la receta analizada, la huella del dataset y las primeras ocho filas con su etiqueta
«Rule applied to this data», y la receta devuelta. La línea BALANCE vuelve partida en una por etiqueta y NOISE va la última: esto es la receta ANALIZADA, no el texto que se escribió. Debajo, la huella y las primeras ocho de las 200 filas con la etiqueta que les dio la regla.
  • La regla que se enseña es la analizada, no tu texto. BALANCE: 1=0.3, 0=0.7 vuelve como una línea por etiqueta, y NOISE se escribe la última. Si aquí falta una línea tuya, el analizador la descartó — que es la forma más rápida de encontrar una errata.
  • Tres desenlaces, tres mensajes. La receta se aplicó; o no se pudo leer y el core etiquetó al azar; o se leyó y no separó los datos, así que el core etiquetó al azar igualmente. No son el mismo problema y no se les da el mismo consejo.
  • Se dice quién escribió la regla. Si dejaste la caja vacía y hay un proveedor de LLM configurado, el core puede proponer él las reglas — y la pantalla lo dice, en vez de atribuirte una decisión que no tomaste.

El manual que vive dentro del producto está a una pulsación de la caja, y escribe sus ejemplos con las columnas y los rangos de tu modelo, para que se puedan usar sin traducir nada:

El panel «How to write a recipe» desplegado: la sintaxis línea a línea, los cuatro avisos y tres ejemplos escritos con las columnas de este modelo
«How to write a recipe», desplegado. La sintaxis línea a línea, las cuatro reglas que rompen una receta que parece bien y —abajo— ejemplos escritos con las columnas de este modelo y con umbrales dentro de sus rangos reales. «Use this example» mete uno en la caja.
09Después

La misma receta, las mismas filas — y la receta viaja con el modelo

  • La huella se puede comprobar. Es data_seguido de los 16 primeros caracteres hexadecimales del sha256 del CSV generado. La misma receta con la misma semilla da la misma huella y, por tanto, exactamente las mismas filas — el ruido y el resorteo salen del mismo flujo aleatorio que las columnas, así que la semilla sigue mandando.
  • Se guarda con el modelo (data_recipe) y vuelve con él: cierras el Studio, reabres el proyecto y el dataset se puede reconstruir.
  • Sale en el paquete exportado como data_recipe.txt, junto a la especificación de inferencia — para que quien reciba un modelo pueda leer con qué datos se entrenó y bajo qué regla.
  • Son diez líneas de texto. Vive en su propio fichero y no dentro del programa de entrenamiento, lo que quiere decir que se pega en un artículo o en un foro y la entiende alguien que no ha abierto el Studio en su vida.
10Los límites

Lo que una receta NO es

  • No son datos reales. Una receta genera filas sintéticas, declaradas como tales. Para producción, trae tu CSV — esa puerta está justo debajo de la caja y pasa la misma validación.
  • No sustituye al catálogo de plantillas. Celsius a Kelvin, la lluvia de Santander, el EUR/USD del BCE: eso son medidas de verdad, y siguen siendo la mejor puerta para quien quiere ver el producto funcionando sobre algo real.
  • No mejora el motor de entrenamiento. Ni una línea. Lo que cambia es lo que se le da de comer.
  • No conoce tu dominio. El core garantiza que las filas obedecen a la regla que escribiste y que puedes reproducirlas. Si esa regla es cierta en el mundo lo decides tú, y es la única parte que nadie puede comprobar por ti.
Dos interfaces
Una receta, en los dos sitios
La caja está en la fase 2 de la interfaz por fases y en la vista Data del Workbench. Mismo lenguaje, misma ayuda, mismo core: una receta escrita en una la lee la otra.
Sin clave de API
Sin LLM por medio
Se analiza y se evalúa en Python, fila a fila. Si hay proveedor configurado, puede proponer las reglas cuando no escribes ninguna, y entonces tú las corriges: gana siempre la persona.
Sigue siendo opcional
Se puede generar sin ella
Hay un uso legítimo: ver exactamente qué columnas espera el modelo para rellenarlas tú. Se te avisa ANTES de generar de que el objetivo será aleatorio, no después de entrenar.
Reproducible
La semilla sigue mandando
El ruido y el resorteo que cumple un BALANCE salen del mismo flujo aleatorio que las columnas. Misma receta, misma semilla, mismo CSV — y la huella lo demuestra.
Conseguir MatrixAI Studio