weltby Ergodic Sign inGet started
All use cases

Is This a Bus, a Van or a Car?

From 18 measurements of its silhouette, is this vehicle a double-decker bus, a van, or one of two car models? It shows how far shape alone gets you.

Use caseEngineeringPredictionModel evaluation

The table

846 vehicle silhouettes with 18 shape measurements such as compactness, circularity and scatter, labelled with one of four vehicle types. It's in Welt's research catalogue as Vehicle Shape Features, 846 rows by 19 columns, licensed CC BY 4.0. The catalogue measures its signal at 0.71. At 846 rows and 18 features, TabICLv2, Kumo Tabular Medium and Mitra-v2 take the table as it is. The others can't take a table this size, so the walkthrough leaves them out.

Walkthrough

  1. Load it from the catalogue

    Find the table, read its recorded target and print the column names.

    import pandas as pd
    from welt import Client
    
    with Client() as client:
        item = client.research_datasets(q="vehicle shape features", limit=1)["items"][0]
        info = client.research_dataset(item["id"])
        data = client.load_research_dataset(item["id"])
    
    target = info["targets"][0]
    target = target["name"] if isinstance(target, dict) else target
    print([column["name"] for column in info["schema"]], target)
  2. Pick the rows

    Set aside 20 rows to predict at the end, and keep the rest for the models to learn from.

    known = data.dropna(subset=[target])
    new_rows = known.sample(20, random_state=1)
    table = known.drop(new_rows.index)
  3. Compare the models and predict

    The models compete on the same folds against a simple guess, then the top-ranked one is fitted on the whole table. ROC AUC runs from 0.5, a coin toss, to 1, a perfect ranking, and a lower Brier score means the probabilities can be trusted more. The last table puts each prediction next to the real answer.

    with Client() as client:
        evaluation = client.evaluate(table, target, task="classification", seed=7,
                                     models=["tabicl-v2", "kumo-medium", "mitra-v2"])
        model = evaluation.fit()
    
    print(evaluation.summary()[["name", "rank", "roc_auc_mean", "brier_mean"]])
    features = new_rows.drop(columns=target)
    print(pd.DataFrame({"actual": new_rows[target].values, "predicted": model.predict(features),
                        "probability": model.predict_proba(features).max(axis=1)}))

What you get

A type per vehicleWith a probability for each type.
Which cars get confusedRead the per-class scores.
Small data handled846 rows fit three of the four models without sampling.

Try it

Use Open with to run the research datasets notebook in Colab, Kaggle or Jupyter and search for "vehicle shape features", or run the code above after pip install "welt-client[parquet]".