You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
e-Satis exposes four top-level states (Satildi / Birinci Aliciya Sure Verildi / Malin Satisinin Dusmesi / Ihale Sonucu Girilmemistir); no fifth status invented. Only Satildi is a completed sale; settlement-pending/missing-result are CENSORED (not sold=false); Malin Satisinin Dusmesi is reason-dependent (withdrawal/Satistan Vazgecilmesi is administrative, not a market no-trade). classify_auction_outcome + outcome_status/outcome_reason/trade_outcome_class fields; raw taxonomy preserved.
Removed uyap_sale_prob from m_obs, simulated moments and the Jacobian (reason: public UYAP outcome taxonomy does not currently identify a comparable negative auction trade class). Not replaced with 0/1/guessed rate. Kept uyap_win_over_appraisal_mean/sd as conditional-on-completed-sale moments. Measured: m_obs 5->4, but condition number 1.7e17 -> 61.8 (degenerate sale_prob=1.0 removed the spurious ~0 singular value); rank(J_combined) stays 4/dim 6.
New partial.py: admissible_set Theta_I={theta:Q(theta)<=Q_min+tol} with explicit sensitivity-tested tolerance tol=max(1e-4, rel*|Q_min|), common random numbers, reproducible global+local sampling; measured set-identified mu_s/sigma_s/eta, point-like mu_b/sigma_b/auction_shift, parameter trade-off correlations. PartiallyIdentifiedPredictor separates within-theta negotiation uncertainty from between-theta identification uncertainty (status=PARTIALLY_IDENTIFIED); never called observed price or measured accuracy. CLI: structural partial + value --partial. theta NOT shrunk for rank; TOKI stays external; no ML/weak-supervision/SaleProbability/fourth source. 187 tests passing.
pytest -q #182 tests, fully offline (no network or API key required)
304
+
pytest -q #187 tests, fully offline (no network or API key required)
305
305
```
306
306
307
307
## Methodology & References
@@ -332,6 +332,7 @@ Negotiation-margin figures from Turkish market reporting: İstanbul ≈ 10%, Ank
332
332
- [x] **TOKİ reclassified as `external_cross_mechanism_benchmark` & KAP 265789→312317 audit (PENDING)** — the 5 genuine TOKİ cohort/composition moments are **not** labelled *unavailable* (they are observed and available); they are declared an **external cross-mechanism benchmark** that is deliberately **outside** the current SMM identification system (`moments_used_in_identification = 0`, reason: *no current model-implied primary-market counterpart*). `sold structural identify` reports this explicitly; **`rank(J_TOKİ)` stays 0 and was _not_ “fixed” by inventing a primary-market mechanism, and `θ` was _not_ shrunk to force rank**. Separately, a candidate second KAP negotiated disposal (records `265789→312317`, appraisal 15.487M TRY → sale 8.0M USD +VAT) is recorded under [`validation/structural/kap_candidates.json`](validation/structural/) as **`PENDING_AUDIT`** and **does not enter the genuine set / `kap_log_ratio` moments** — admission is blocked by conditions that cannot be verified without fabrication: same-transaction only *operator-linked* (#1), related-party *unverified* (#4), **currency mismatch** TRY vs USD with **no documented official TCMB rate** (#5,#6), and **VAT non-comparability** (#7,#8). Measured identification is therefore unchanged: `m_obs`=3, `J_UYAP` rank 1 / `J_KAP` rank 1 / `J_combined` rank 2, singular values `[1.73, 0.579, 0]`, condition →∞, **`NOT_IDENTIFIED` (rank 2 / dim 6)**. Still operator-blocked (never fabricated): 1 unsold + 1 additional sold UYAP auction, and an admissible same-currency/VAT-comparable second KAP disposal
333
333
- [x] **Genuine audited second KAP disposal (currency + VAT + related-party source-audited) → `kap_log_ratio_sd` unlocked, rank 2→3** — the previously `PENDING_AUDIT` KAP chain `265789→312317` was manually source-audited against the official KAP disclosure chain (linked as **one** Kapadık/Esenyurt, 382 ada 11 parsel disposal via the previous-notification reference — **not** two transactions), the official valuation-report attachment (`KDV Hariç`), and the official TCMB EVDS series `TP.DK.USD.A.YTL`. Final realized consideration `7,533,161 USD + KDV` (from completion update `312317`, superseding the earlier `8,000,000 USD` **proposal**) normalized to TRY at the documented buying rate `2.03650000` on the completion/conversion date `2013-10-01` → `15,341,282.3765 TRY`; appraisal `15,487,102 TRY`, both compared **excluding VAT** (no VAT added to either side); related-party from the official old-form `Karşı Taraf İle Olan İlişkinin Niteliği = Yoktur` → `related_party=false` (old-form provenance preserved; **no** modern structured SPK boolean invented). `log(sale/appraisal) = −0.009460159132789749`. Admitted as one genuine negotiated-disposal observation (`corporate_negotiated_non_related`; excluded from `asking_to_closing_labels()`). **Measured genuine identification gain: KAP negotiated count 1→2, `kap_log_ratio_sd` unavailable→observable, `m_obs` 3→4, `rank(J_KAP)` 1→2, `rank(J_combined)` 2→3, singular values `[1.706, 0.678, 0.118, 1.3e-18]`, smallest non-zero sv `0.579→0.118`; status stays `NOT_IDENTIFIED` (rank 3 / dim 6) — real data raised the rank without touching θ, TOKİ stays `external_cross_mechanism_benchmark`, and no ML / weak-supervision / fourth-source layer was added.** UYAP still operator-blocked: 1 unsold + 1 additional sold auction
334
334
- [x] **Genuine audited second sold UYAP auction (e-Satış `16662608597`) → `uyap_win_over_appraisal_sd` unlocked, rank 3→4** — manually source-audited from the public e-Satış portal + official auction documents (Ankara/Altındağ dükkan): `Takdir Olunan Değer/Kıymeti = 13,000,000 TRY` kept as `appraised_value = Q` (court-appraised value, **not** the reserve/floor), official result `İhale Bedeli 6,550,000 TRY` on `03/06/2026` with `En Yüksek Teklif Verene Malın İhale Edilmesi` → `sold=true`. `winning_bid/appraised_value = 0.5038461538461538` (auction ratio, **not** an ordinary-resale asking-to-closing discount; `domain=uyap`, `sale_mechanism=auction`, excluded from `asking_to_closing_labels()`). Area semantics preserved and **never interchanged**: `parcel_area_m2=1864.72`, `unit_net_m2=325.00`, `unit_gross_m2=350.00`. `priority_claims`/`realization_costs` not sufficiently observed → `legal_floor_exact=false` (50% of Q is a lower bound, not an exact floor). Privacy boundary: no party/representative/counsel/payment/case-party data transcribed — only non-personal economic/property/public-record fields. **Measured genuine identification gain (θ unchanged): UYAP genuine sold 1→2 (2 sold, 0 unsold, `sale_prob` still degenerate 1.0), `uyap_win_over_appraisal_sd` unavailable→observable (mean `0.7569`, sd `0.2531`), `m_obs` 4→5, `rank(J_UYAP)` 1→2, `rank(J_KAP)` 2, `rank(J_combined)` 3→4, singular values `[1.760, 0.975, 0.214, 0.0285, 1.0e-17]`, smallest non-zero sv `0.118→0.0285`, condition `1.7e17`, weak direction `{sigma_s:0.80, mu_s:0.59, eta:-0.07}`; every currently-modeled moment is now observed (`unavailable_moments` empty) yet status stays `NOT_IDENTIFIED` (rank 4 / dim 6) — the remaining gap is degenerate `sale_prob` + limited variation, not a missing moment. TOKİ stays `external_cross_mechanism_benchmark`; no ML / weak-supervision / fourth-source layer added.** UYAP still operator-blocked: 1 unsold auction (to break the degenerate sale probability)
335
+
- [x] **UYAP outcome-taxonomy correction, invalid `uyap_sale_prob` removed, pivot to PARTIAL IDENTIFICATION + identification-aware prediction** — the actual authenticated e-Satış interface exposes four top-level states (`Satıldı`, `Birinci Alıcıya Süre Verildi`, `Malın Satışının Düşmesi`, `İhale Sonucu Girilmemiştir`); **no fifth status was invented** to unlock a sale probability. Only `Satıldı` is a terminal completed sale; settlement-pending / missing-result are **censored** (not `sold=false`), and `Malın Satışının Düşmesi` is reason-dependent (withdrawal/`Satıştan Vazgeçilmesi` is administrative, **not** a market no-trade). Because the public taxonomy cannot separate a comparable negative auction-trade class, **`uyap_sale_prob` was removed from `m_obs`, the simulated moments, and the Jacobian** (documented reason: *public UYAP outcome taxonomy does not currently identify a comparable negative auction trade class*; raw taxonomy + reason preserved for future research, never replaced with a guessed rate). The conditional moments `uyap_win_over_appraisal_mean/sd` are kept, explicitly interpreted as *winning_bid/appraised_value conditional on an observed completed sale*. **Measured effect: removing the degenerate `sale_prob=1.0` moment dropped `m_obs` 5→4 but improved conditioning — condition number `1.7e17 → 61.8` (the spurious ~0 singular value vanished), `rank(J_combined)` stays 4/dim 6.** The final inference gate pivots from forced point identification to **partial identification** `Θ_I = {θ : Q(θ) ≤ Q_min + tol}` (explicit, sensitivity-tested tolerance `tol = max(1e-4, rel·|Q_min|)`, common random numbers, reproducible sampling) via `sold structural partial` — measured `mu_b`/`sigma_b`/`auction_shift` point-like, `mu_s`/`sigma_s`/`eta` **set-identified**, with parameter trade-off correlations. `sold structural value --partial` produces an **identification-aware** closing range that separates *within-θ negotiation uncertainty* from *between-θ identification uncertainty* (`identification_status = PARTIALLY_IDENTIFIED`), never called an observed price or measured ordinary-resale accuracy. θ was **not** shrunk to recover rank; TOKİ stays external; no ML / weak-supervision / SaleProbability / fourth source added. The public-source UYAP no-trade hunt is closed
335
336
-[ ]**SaleProbability** model (`P(sold ≤ N days)`) trained on collected outcomes
336
337
-[ ] Live, ToS-reviewed fetchers for the public label sources
337
338
-[ ] Broker-vs-benchmark analytics over an aggregate anonymized dataset
0 commit comments