SPB Git forge

spb/wp22_uqo

Public
6commits 1branches 0releases
142.4 MBsize
maindefault branch
1 h agolast push
TeX 55.1% Python 44.2%
2.0 KB · 45 lines python
Raw Blame History
1#!/usr/bin/env python32# Author: Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca3"""Phase 2 — HMTS benchmark (G) at province × class and region × class, windows 4 and 13 months.4Output: results/benchmarks/series_hmts.parquet (same long schema as series.parquet)."""5from __future__ import annotations67import sys8import time9from pathlib import Path1011sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))12import polars as pl1314from sharp_hpi import config as C15from sharp_hpi import estimators as E16from sharp_hpi.hedonic import assign_loc_fe, build_features1718OUT = C.RESULTS / "benchmarks"19GRID = E.month_grid("2021-01", "2026-10")202122def main() -> None:23    f = build_features(pl.read_parquet(C.ANALYTIC_TX))24    rows = []25    for cls in C.PROPERTY_TYPES:26        d = f.filter(pl.col("property_class") == cls)27        prov = assign_loc_fe(d, min_n=15).with_columns(pl.col("mrc_code").alias("loc_coarse"))28        for w in (4, 13):29            t0 = time.time(); s = E.hmts(prov, GRID, window=w)30            rows.append(s.to_frame().with_columns(pl.lit(cls).alias("class"), pl.lit("province").alias("level"), pl.lit("QC").alias("geo_id"), pl.lit(None, dtype=pl.Float64).alias("se")))31            print(cls, "province", s.method, f"{time.time() - t0:.0f}s", flush=True)32        for reg in sorted(d["region_code"].unique().to_list()):33            dr = d.filter(pl.col("region_code") == reg)34            if dr.height < 500:35                continue36            drr = assign_loc_fe(dr, min_n=15).with_columns(pl.col("mun_code").alias("loc_coarse"))37            t0 = time.time(); s = E.hmts(drr, GRID, window=13)38            rows.append(s.to_frame().with_columns(pl.lit(cls).alias("class"), pl.lit("region").alias("level"), pl.lit(reg).alias("geo_id"), pl.lit(None, dtype=pl.Float64).alias("se")))39            print(cls, reg, s.method, f"{time.time() - t0:.0f}s", flush=True)40        pl.concat(rows).select(["class", "level", "geo_id", "method", "month", "log_index", "se", "n"]).write_parquet(OUT / "series_hmts.parquet")414243if __name__ == "__main__":44    main()45