Skip to main content
This guide walks you through dataset configuration, fitting models, and inference process.

End-to-end example

The following snippet chains all seven steps into a single script you can run against any labeled CSV.
import outerproduct as op
import pandas as pd

op.init()

# 1. Load data
dataset = op.LocalDataset.from_csv("loans.csv").upload()

# 2. Train with reasoning
model = op.reasoning.fit(
    dataset, task=op.Binclass(label_column="approved")
).wait()

# 3. Prepare inference rows (drop the label column the model never saw)
X = pd.read_csv("loans.csv").head(100).drop(columns=["approved"])
test = op.LocalDataset.from_pandas(X).upload()

# 4. Global importance
importance = model.get_global_drivers()
for name, score in zip(importance.feature_names, importance.attributions):
    print(f"{name}: {score:.4f}")

# 5. Local explanations + predictions in one call
predictions, reasoning = model.predict_and_explain(test)

# 6. Counterfactuals: what would flip the denied loans to approved?
denied_mask = predictions < 0.5
denied = op.LocalDataset.from_pandas(X[denied_mask]).upload()
scenarios = model.scenario(denied, target_class=1)

# 7. Pattern aggregation across the denied cohort
pt = op.reasoning.pattern_tracker.fit(
    model, dataset, target_range=(None, 0.5)
).wait()
for fp in pt.patterns:
    print(f"{fp.label}: precision={fp.precision:.2f}")