SPB Git forge

spb/rent-ka

Public
8commits 1branches 0releases
7.4 MBsize
maindefault branch
19 days agolast push
Python 68.8% TypeScript 18.6% CSS 8.7% JavaScript 3.3% HTML 0.6%
3.8 KB · 93 lines tsx
Raw Blame History
1// -----------------------------------------------------------------------------2// Rent-Ka — Rental listings aggregator (Canada, outside Québec)3// Author: Simon-Pierre Boucher — contact@spboucher.ai4// pages/JusteValeur.tsx: "How is fair value calculated?"5//   Transparency page on the estimation framework (rentka/fairvalue.py).6// -----------------------------------------------------------------------------7import { Link } from "react-router-dom";8import FairValueBadge from "../components/FairValueBadge";910export default function JusteValeurPage() {11  return (12    <div className="container legal">13      <span className="kicker">Rent-Ka price analysis</span>14      <h1>How is fair value calculated?</h1>1516      <section>17        <p>18          On every listing, Rent-Ka shows an <b>estimated fair value</b> of the19          rent and a badge that places the asking price against the market:20        </p>21        <p className="fv-demo">22          <FairValueBadge verdict="sous" deviation={-0.12} />{" "}23          <FairValueBadge verdict="marche" deviation={0.02} />{" "}24          <FairValueBadge verdict="sur" deviation={0.15} />25        </p>26      </section>2728      <section>29        <h3>The method, simply</h3>30        <ul>31          <li>32            <b>1. The market as reference.</b> We start from all the listings33            currently published on Rent-Ka (continuously refreshed by our34            syncs). For each market segment — city, neighbourhood, bedroom35            count — we compute the median rent and its typical range. Rooms and36            shared units form their own segment.37          </li>38          <li>39            <b>2. Features matter.</b> Heat or electricity included, parking,40            furnished, air conditioning, area…: the effect of each feature on41            the rent is measured from the listings themselves, then applied to42            the estimate.43          </li>44          <li>45            <b>3. Comparable neighbours.</b> When the listing is geolocated, we46            refine with the closest comparable listings (same size class,47            within 3 km), giving more weight to the closest and most similar.48          </li>49          <li>50            <b>4. Guardrails.</b> The estimate stays bounded to a plausible51            corridor around the segment reference. Every estimate carries a52            range and a confidence level. If there are not enough reliable53            comparables, or if the advertised price is ambiguous ("from",54            weekly price), <b>no badge is shown</b> rather than a misleading55            verdict.56          </li>57        </ul>58      </section>5960      <section>61        <h3>The classification</h3>62        <p>63          The gap between the asking price and the fair value determines the64          badge: <b>below market</b> from −8 %, <b>above market</b> from +8 %,65          <b> at market</b> in between. These thresholds are recalibrated66          periodically by observing the market — notably how quickly67          "below market" listings find takers.68        </p>69        <p>70          Tip: on the home page, the <b>"▼ Below market"</b> filter shows only71          the good deals, best ones first.72        </p>73      </section>7475      <section>76        <h3>What it is not</h3>77        <p>78          The Rent-Ka fair value is an <b>indicative statistical estimate</b>,79          recomputed at every sync. It is neither a professional appraisal nor80          a legal opinion on the rent. No data is invented: when the local81          market does not provide enough comparable listings, we say so instead82          of estimating blindly.83        </p>84      </section>8586      <div className="fine">87        Questions or observations about an estimate?{" "}88        <Link to="/contact">Write to us</Link>.89      </div>90    </div>91  );92}93