M-Bus Gateway
← Tilbage til blog
· energianalyse· portefølje· KPI· benchmark· kWh/m²· ejendomsadministration· varmeforbrug· outlier· trend

Energiforbrugsanalyse af ejendomsportefølje — KPI'er og benchmark

Energianalyse af ejendomsportefølje: kWh/m²/år KPI, porteføljegennemsnit, outlier-identifikation, trend-analyse, graddage-normalisering og handlingsplan for ineffektive ejendomme.

Af M-Bus Gateway

Portefølje-energianalyse identificerer hvilke ejendomme der er ineffektive og kræver handling. Her er KPI'erne og analysemetoderne.


Nøgle-KPI: kWh/m²/år

Universel benchmark for varmeforbrug:

Formel:
  kWh/m²/år = Samlet varmeforbrug (kWh) / Opvarmet areal (m²)

Eksempel portefølje (10 ejendomme):
  Ejendom A: 144.000 kWh / 800 m² = 180 kWh/m²/år  ← D-mærke (ok)
  Ejendom B: 216.000 kWh / 750 m² = 288 kWh/m²/år  ← F-mærke (kritisk!)
  Ejendom C:  80.000 kWh / 600 m² = 133 kWh/m²/år  ← C-mærke (god)
  Ejendom D: 120.000 kWh / 900 m² = 133 kWh/m²/år  ← C-mærke (god)
  ...

Porteføljegennemsnit: Vægtet gns. baseret på areal:
  Total kWh: 1.460.000 kWh
  Total m²:  7.800 m²
  Gns. kWh/m²/år = 1.460.000 / 7.800 = 187 kWh/m²/år (D-mærke)

Energimærke-tærskler (DK fjernvarme):
  A: < 52 | B: 52-90 | C: 90-135 | D: 135-180 | E: 180-255 | F: 255-320 | G: > 320

Graddage-normalisering: Retfærdig år-til-år sammenligning

# Graddage-normalisering sikrer at kolde år ikke fejlagtigt
# viser ejendomme som "ineffektive":

def normalize_portfolio(
    properties: list[dict],
    year: int,
    normal_hdd: float = 2900.0,  # Normalår HDD for DK
) -> list[dict]:
    """
    Normaliser kWh/m²/år til graddage-korrigeret benchmark.
    """
    results = []
    for prop in properties:
        actual_hdd = prop["heating_degree_days_year"]
        actual_kwh_per_m2 = prop["kwh_per_m2"]

        # Normaliser til normalår:
        if actual_hdd > 0:
            normalized = actual_kwh_per_m2 * (normal_hdd / actual_hdd)
        else:
            normalized = actual_kwh_per_m2

        results.append({
            **prop,
            "kwh_per_m2_normalized": round(normalized, 1),
            "hdd_adjustment_pct": round((normal_hdd / actual_hdd - 1) * 100, 1),
            "energy_label": classify_energy_label(normalized),
        })

    return sorted(results, key=lambda x: x["kwh_per_m2_normalized"], reverse=True)


def classify_energy_label(kwh_per_m2: float) -> str:
    if kwh_per_m2 < 52: return "A"
    if kwh_per_m2 < 90: return "B"
    if kwh_per_m2 < 135: return "C"
    if kwh_per_m2 < 180: return "D"
    if kwh_per_m2 < 255: return "E"
    if kwh_per_m2 < 320: return "F"
    return "G"

Outlier-identifikation: Find ineffektive ejendomme

import statistics

def identify_outliers(
    properties: list[dict],
    threshold_std_devs: float = 1.5,
) -> dict:
    """
    Find ejendomme med unormalt høj energiintensitet.
    Outlier = > 1.5 standardafvigelser over gennemsnit.
    """
    values = [p["kwh_per_m2_normalized"] for p in properties]
    mean = statistics.mean(values)
    std_dev = statistics.stdev(values) if len(values) > 1 else 0

    outlier_threshold = mean + threshold_std_devs * std_dev

    critical = [p for p in properties if p["kwh_per_m2_normalized"] > outlier_threshold]
    good = [p for p in properties if p["kwh_per_m2_normalized"] < mean - threshold_std_devs * std_dev]
    normal = [p for p in properties if p not in critical and p not in good]

    return {
        "mean": round(mean, 1),
        "std_dev": round(std_dev, 1),
        "outlier_threshold": round(outlier_threshold, 1),
        "critical": critical,    # Kræver handling
        "good": good,            # Best practice-eksempler
        "normal": normal,
        "potential_savings_kwh": sum(
            (p["kwh_per_m2_normalized"] - mean) * p["area_m2"]
            for p in critical
        ),
    }

Trend-analyse: Er ejendommen forbedret?

Trend-beregning over 3 år (graddage-normaliseret):

Ejendom B (288 kWh/m²/år i 2026):
  2024: 295 kWh/m²/år (normaliseret)
  2025: 291 kWh/m²/år (normaliseret)
  2026: 288 kWh/m²/år (normaliseret)

Lineær regression: Trend = -3,5 kWh/m²/år pr. år
→ Forbedres langsomt (-1,2% pr. år)
→ Vil nå 255 kWh/m²/år (E-mærke) om ~10 år

Handlingsanbefaling:
  Nuværende trend: Util strækkelig (kræver yderligere tiltag)
  Estimeret potentiale ved hydraulisk balancering: -30 kWh/m²/år
  Estimeret potentiale ved vinduesisolering: -20 kWh/m²/år
  Samlet forbedringspotentiale: -50 kWh/m²/år → 238 kWh/m²/år (E)

Handlingsplan: Prioritering af indsats

Portfolio-action plan baseret på analyse:

PRIORITET 1 — Kritisk (> porteføljegennemsnit + 1.5σ):
  Ejendom B: 288 kWh/m²/år
  → Bestil hydraulisk balancering (estimeret: 6 mdr tilbagebetaling)
  → Termografering (kortlæg isoleringsmangler)
  → Energimærkning revision

PRIORITET 2 — Forhøjet (D-E mærke):
  Ejendom A: 180 kWh/m²/år
  → Overvej termostatventil-eftersyn
  → Returtemperatur-overvågning aktiveret

PRIORITET 3 — God (A-C mærke):
  Ejendom C+D: 133 kWh/m²/år
  → Vedligehold nuværende niveau
  → Del best practice med prioritet 1+2

Estimeret besparelse ved handling:
  Ejendom B: (288-187) × 750 m² × 0,90 kr./kWh = 68.175 kr./år
  Investering hydraulisk balancering: ~15.000 kr.
  Tilbagebetaling: 2,6 måneder

Platform: Portfolio KPI dashboard

M-Bus Gateway portfolio KPI endpoint:
GET /api/v1/portfolio/kpi

Response:
{
  "total_properties": 10,
  "total_area_m2": 7800,
  "portfolio_kwh_per_m2": 187.0,
  "portfolio_kwh_per_m2_normalized": 183.5,
  "energy_label_distribution": {
    "A": 0, "B": 1, "C": 2, "D": 4, "E": 2, "F": 1, "G": 0
  },
  "critical_properties": [
    {
      "id": "prop-b",
      "name": "Ejendom B",
      "kwh_per_m2_normalized": 288.0,
      "energy_label": "F",
      "deviation_from_mean_pct": 54.0
    }
  ],
  "trend_kwh_per_m2_annual": -2.1,
  "potential_savings_kwh": 75600,
  "potential_savings_dkk": 68040
}

Konklusion

Portefølje-energianalyse med kWh/m²/år (graddage-normaliseret) identificerer objektivt hvilke ejendomme der kræver handling. Outlier-detektion med 1,5 standardafvigelser finder de kritiske ejendomme. Trend-analyse viser om en ejendom forbedres eller forværres. M-Bus Gateway platformen beregner disse KPI'er automatisk og viser dem i portfolio-dashboard med handlingsanbefalinger og estimerede besparelser.

Se varmeforbrug benchmarking guide eller graddage normalisering guide.