On this page

Conditional Columns (depends_on)

Real data is conditional: salary depends on role, MRR depends on plan tier, claim-approval probability depends on policy type. depends_on makes a column's distribution switch on the value of another column — in the same table, or in a parent table across a foreign key.

If two numeric columns should move together statistically (without one strictly determining the other), use a correlation instead. Use depends_on when a category picks the distribution.


Same-table dependency#

Python
import misata

schema = {
    "employees": {
        "__rows__": 8000,
        "role":   {"type": "string", "enum": ["Intern", "Engineer", "CTO"],
                   "probabilities": [0.3, 0.6, 0.1]},
        "salary": {
            "type": "float",
            "depends_on": "role",
            "mapping": {
                "Intern":   {"mean": 40000,  "std": 3000},
                "Engineer": {"mean": 120000, "std": 10000},
                "CTO":      {"mean": 300000, "std": 20000},
            },
            "default": {"mean": 80000, "std": 8000},   # used for any unmapped value
        },
    }
}
tables = misata.generate_from_schema(misata.from_dict_schema(schema, seed=1))

Each mapping value is itself a set of distribution parameters, so the conditional branches can have entirely different shapes.

Boolean outcome (a conditional rate)#

For a boolean column, map each case to a probability:

Python
"approved": {
    "type": "boolean",
    "depends_on": "policy_type",
    "mapping": {"auto": 0.80, "health": 0.60, "life": 0.55},
}

Across a foreign key#

Reference a parent column with dotted fk_column.parent_column notation. The child row resolves the parent value through its foreign key, then picks the matching branch:

Python
schema = {
    "plans": {"__rows__": 2, "id": {"type": "integer", "primary_key": True},
              "tier": {"type": "string", "enum": ["Free", "Enterprise"]}},
    "subscriptions": {
        "__rows__": 5000,
        "id":      {"type": "integer", "primary_key": True},
        "plan_id": {"type": "integer", "foreign_key": {"table": "plans", "column": "id"}},
        "mrr": {
            "type": "float",
            "depends_on": "plan_id.tier",       # parent column via the FK
            "mapping": {"Free": {"mean": 0, "std": 1},
                        "Enterprise": {"mean": 1000, "std": 50}},
        },
    },
}

Keys#

KeyMeaning
depends_onThe predictor column. "col" for same-table, "fk_col.parent_col" across a FK.
mapping{value → params}. Numeric → {mean, std} (or any distribution params); boolean → a probability; categorical → a list of choices.
defaultDistribution params used when a row's predictor value is not in mapping.

In the studio#

The column Inspector has a Conditional section: pick the predictor column and add when value → outcome cases (μ/σ for numeric columns, P(true) for booleans). Cross-table dependencies use the fk_col.parent_col form.

Last updated Edit this page.md