weltby Ergodic Sign inGet started
All use cases

What Will This Bengaluru Home Sell For?

Given the area type, location, size, square footage, bathrooms and balconies, what's a fair price? Agents and buyers want a quick, consistent estimate before they negotiate.

Use caseFinancePredictionModel evaluation

The table

13,320 listings from Bengaluru with seven columns about each home and the listed price. It's in Welt's research catalogue as Bengaluru Real Estate Prices, 13,320 rows by 8 columns, licensed CC0: Public Domain. The catalogue measures its signal at 0.47. At 13,320 rows and 7 features the table is larger than the model limits allow, so the walkthrough evaluates and fits on a seeded sample of 8,000 rows. TabICLv2 and Kumo Tabular Medium compete.

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="bengaluru real estate prices", 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. The models learn from a seeded sample of 8,000 of the rest, the most this table's width allows.

    known = data.dropna(subset=[target])
    new_rows = known.sample(20, random_state=1)
    table = known.drop(new_rows.index).sample(8000, random_state=7)
  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. RMSE and MAE are average errors in the target's own units, so lower is better. The last table puts each prediction next to the real answer.

    with Client() as client:
        evaluation = client.evaluate(table, target, task="regression", seed=7,
                                     models=["tabicl-v2", "kumo-medium"])
        model = evaluation.fit()
    
    print(evaluation.summary()[["name", "rank", "rmse_mean", "mae_mean"]])
    features = new_rows.drop(columns=target)
    print(pd.DataFrame({"actual": new_rows[target].values, "predicted": model.predict(features)}))

What you get

A fair-price estimateA price for any listing in seconds.
Over- and under-priced homesCompare the estimate with the asking price.
Consistent valuationsThe same method for every home on the market.

Try it

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