What's on the Ground in This Part of Ouagadougou?
From its Sentinel-2 satellite bands, is this spot in Ouagadougou buildings, roads, bare soil, vegetation or water? Fast-growing cities need up-to-date maps, and ground surveys can't keep pace.
The table
Points in Ouagadougou with their Sentinel-2 band values and spectral indices, labelled by land-cover class. It's in Welt's research catalogue as Trusted Urban Land-Cover Training Labels, 46 African Cities: Ouagadougou, 5,013 rows by 19 columns, licensed CC0 1.0. The catalogue measures its signal at 0.64. At 5,013 rows and 18 features, TabICLv2 and Kumo Tabular Medium take the table as it is. The others can't take a table this size, so the walkthrough leaves them out.
Walkthrough
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="urban land-cover Ouagadougou", 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)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)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"]) 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
Try it
Use Open with to run the research datasets notebook in Colab, Kaggle or Jupyter and search for "urban land-cover Ouagadougou", or run the code above after pip install "welt-client[parquet]".
Open with
- Type
- Use case
- Area
- Climate
- Question
- What's on the Ground in This Part of Ouagadougou?
- Model
- TabICLv2, Kumo Tabular Medium
- Data
- Trusted Urban Land-Cover Training Labels, 46 African Cities: Ouagadougou, 5,013 rows
- For
- Urban planners and remote-sensing analysts
- Licence
- CC0 1.0