Zum Inhalt

Mietanalyse und RentEstimate

Status: verbindlich
Spezifikationsversion: 1.1.0
Modellbezug: 0.6.2
RentEstimate-Schema: 0.1.0
Stand: 2026-07-05

1. Zweck

Die Mietanalyse erzeugt einen nachvollziehbaren Vorschlag für die monatliche Nettokaltmiete. Sie ist ein Enrichment-Baustein für Einzel- und Batch-Analyse, keine eigene Investmentberechnung und keine rechtliche Feststellung zulässiger Miete.

2. Quellenarten

official_rent_reference
market_rent_dataset
wg_estimate

Offizielle Referenz, Angebotsmarktmiete, Bestandsmiete und WG-Schätzung werden nicht unkommentiert vermischt.

3. Datenfluss

Objektgrunddaten
-> RentReferenceLookup
-> RentEstimate
-> bewusste Übernahme oder transparenter Enrichment-Schritt
-> PropertyInput.rental.monthly_cold_rent
-> Single-Property-Engine

Nur published RentReferenceDatasets innerhalb ihres Scope dürfen automatisch verwendet werden.

4. Gemeinsamer RentEstimate-Vertrag

Pflichtfelder für alle Schätztypen:

rent_estimate_id
created_at
estimate_type
source_type
lookup_method
matched_location_level
cold_rent_per_sqm
monthly_cold_rent
confidence
confidence_level
confidence_method_version
required_fields_missing
warnings

Optionale oder quellabhängige Felder:

rent_reference_dataset_id
rent_reference_dataset_version
rent_reference_dataset_scope_id
matched_group_fields
p25_eur_per_sqm
median_eur_per_sqm
p75_eur_per_sqm
sample_size
data_from
data_until
fallback_reason

estimate_type beschreibt die fachliche Art der Schätzung:

official_rent_reference
market_rent_estimate
wg_estimate

source_type beschreibt die verwendete Quellenfamilie:

official_rent_reference
market_rent_dataset
wg_estimate

estimate_type = market_rent_estimate verwendet daher regelmäßig source_type = market_rent_dataset. Beide Felder sind bewusst nicht identisch.

5. Konditionale Pflichtfelder

5.1 market_rent_estimate

Zusätzlich Pflicht:

rent_reference_dataset_id
rent_reference_dataset_version
rent_reference_dataset_scope_id
matched_group_fields
p25_eur_per_sqm
median_eur_per_sqm
p75_eur_per_sqm
sample_size

5.2 official_rent_reference

Dataset- und Perzentilfelder sind nur Pflicht, wenn die offizielle Referenz tatsächlich als versioniertes Dataset mit statistischen Gruppen geführt wird. Eine direkte offizielle Einzelreferenz darf ohne P25, Median, P75 und Samplegröße gespeichert werden.

5.3 wg_estimate

Dataset- und Perzentilfelder sind nur Pflicht, wenn die WG-Schätzung auf einem entsprechenden versionierten Dataset basiert. Methodik und Annahmen müssen über lookup_method, Quelle, Confidence und Warnungen nachvollziehbar bleiben.

6. Confidence

confidence:
  Zahl zwischen 0 und 1

confidence_level:
  high
  medium
  low
  insufficient

Aktuelle numerische Ableitung:

>= 0.85 -> high
>= 0.70 -> medium
>= 0.50 -> low
< 0.50  -> insufficient

Die Ableitung wird gespeichert als:

confidence_method_version = rent-confidence-0.1.0

Ein vorhandenes gültiges confidence_level hat bei der DQ-Auswertung Vorrang. Confidence berücksichtigt mindestens:

Dataset-Status
Stichprobengröße
Datenqualität
Match-Tiefe
Datenalter
Quellenqualität
Fallbacks
Ausschlussanteil

7. Kanonische Dataset-Namen

Verbindlich:

rent_reference_dataset_id
rent_reference_dataset_version
rent_reference_dataset_scope_id

Nur als Legacy-Lesealiase zulässig:

source_dataset_id
source_dataset_version

8. RentEstimateReference im PropertyInput

Die Referenz speichert mindestens:

rent_estimate_id
estimate_type
source_type
matched_location_level
matched_group_fields
confidence
confidence_level
confidence_method_version
warnings

Bei market_rent_estimate zusätzlich:

rent_reference_dataset_id
rent_reference_dataset_version
rent_reference_dataset_scope_id
p25_eur_per_sqm
median_eur_per_sqm
p75_eur_per_sqm
sample_size
data_from
data_until
fallback_reason

Damit bleiben Datenqualität, Reporting und Reproduzierbarkeit ohne erneuten Lookup möglich.

9. Segmentregeln

Ein automatischer Wohnungsmiet-Match trennt mindestens:

rent_type = cold
market_type
unit_scope
furnished
property_type

Nicht vermischen:

asking_rent und existing_rent
official_reference und Marktbeobachtung
apartment und room
commercial_unit und Wohnen
furnished und unfurnished

10. Aktuell unterstützte Matching-Hierarchie

Stadt + Stadtteil + Objekttyp + Zustand
Stadt + Stadtteil + Objekttyp
Stadt + Objekttyp
kein belastbarer Match

Die Segmentregeln bleiben auf jeder Fallback-Ebene erhalten.

Noch nicht Teil des aktuellen Vertrags:

Flächenklasse
Baujahresklasse
Postleitzahl als eigenständige Match-Ebene

11. Mietniveaus

P25 = konservative Mietschätzung
Median = Base-Mietschätzung
P75 = optimistische Mietschätzung
monthly_cold_rent
= selected_cold_rent_per_sqm × living_area_sqm

P25 und P75 werden nicht automatisch als Stress und Best verwendet.

12. Übernahme in PropertyInput

Der tatsächlich verwendete Mietwert speichert:

value
unit
origin
source
confidence
scenario_policy
value_status
rent_basis
rent_estimate_reference optional

rent_basis:

current_contract_rent
market_rent_estimate
target_rent
manual_assumption

Ein manueller Override erhält origin = manual. Ein ausdrücklich finaler Override erhält zusätzlich value_status = final und scenario_policy = fixed.

13. Warnungen

RENT_REFERENCE_NOT_FOUND
DATASET_NOT_PUBLISHED
DATASET_ARCHIVED
LOCATION_ONLY_CITY_LEVEL
DISTRICT_FALLBACK_USED
CONDITION_FALLBACK_USED
LOW_SAMPLE_SIZE
LOW_CONFIDENCE_RENT_ESTIMATE
MARKET_TYPE_MISMATCH
UNIT_SCOPE_MISMATCH
FURNISHING_MISMATCH
MANUAL_REVIEW_REQUIRED

14. Einzelanalyse

Objektdaten erfassen
published Dataset innerhalb seines Scope matchen
P25, Median und P75 anzeigen
Wert bewusst übernehmen
Herkunft, rent_basis, Szenario-Policy und Dataset-Metadaten speichern

15. Batch

NormalizedListing
-> RentReferenceLookup
-> RentEstimate
-> PropertyInput

Ein fehlgeschlagener Lookup beendet nicht den gesamten Batch. Der Datensatz bleibt mit Warnung und gegebenenfalls missing weiterverarbeitbar.

16. Beziehung zu Meine Objekte

Ein PropertyRecord speichert den tatsächlich verwendeten Mietwert und die RentEstimateReference. Ein gespeicherter Schätzwert wird nicht automatisch zu einer Mietbeobachtung.

17. Legacy

match_level -> matched_location_level
source_dataset_id -> rent_reference_dataset_id
source_dataset_version -> rent_reference_dataset_version

Neue Datensätze schreiben ausschließlich kanonische Namen.

18. Tests

draft und archived werden nicht automatisch verwendet
published wird nur innerhalb seines Scope angeboten
Marktart, Einheit und Möblierung bleiben getrennt
aktuelle Matching-Hierarchie wird eingehalten
P25, Median und P75 bleiben nachvollziehbar
market_rent_estimate verwendet source_type market_rent_dataset
market_rent_estimate speichert Dataset-ID, Version und Scope
confidence und confidence_level bleiben getrennt
numerische Confidence wird deterministisch kategorisiert
confidence_method_version wird gespeichert
manueller Override ist sichtbar
rent_basis bestimmt die Standard-Szenario-Policy
Legacy-Namen werden nur gelesen