Di halaman ini17 bahagian

Metodologi Ramalan HitungKerusi

Model Bayes berlapis untuk ramalan pilihan raya parlimen Malaysia

Last updated: 2026-10-17 (nota pengesanan pemantauan pakatan dalam §11) · Versi 0.1.3 · Oktober 2026 · Dokumen ini ialah spesifikasi berwibawa bagi model yang dilaksanakan dalam backend/hitungkerusi/analysis_engine/. Laman awam memaparkan dokumen yang sama pada halaman Metodologinya; jika kod dan kertas ini berbeza, itu ialah pepijat.


1. Skop dan prinsip

HitungKerusi (secara harfiah, "mengira kerusi") meramal pilihan raya badan perundangan Malaysia berasaskan sistem undi majoriti mudah (first-past-the-post):

  • Dewan Rakyat — 222 kawasan Parlimen (unjuran GE16).
  • Dewan Undangan Negeri (DUN) — ramalan khusus bagi setiap dewan dengan pengiraannya sendiri: Melaka (28 kerusi, majoriti 15 — hari mengundi PRN 14 November 2026), Sarawak (82, majoriti 42 — PRN mesti diadakan selewat-lewatnya Februari 2027), Johor (56 — PRN seterusnya sekitar 2031), Negeri Sembilan (36 — sekitar 2031) dan Sabah (73 — sekitar 2030; PRN 2025 meninggalkan DUN tergantung). Setiap DUN menjalankan model berlapis yang sama ke atas garis dasarnya sendiri (PRN terbarunya), tinjauan pendapat peringkat negerinya sendiri dan tempoh liputan beritanya sendiri; negeri-negeri yang lain pula mengikut corak yang sama menjelang PRN masing-masing.

Reka bentuk ini berpaksikan empat prinsip:

  1. Kebolehhasilan semula. Setiap angka yang diterbitkan datang daripada baris forecast_run yang tidak boleh diubah; baris itu menyimpan set parameter yang lengkap serta cincangan SHA-256 ke atas kesemua bingkai data input. Menjalankan semula dengan input yang sama akan menghasilkan output yang sama.
  2. Bukti berlapis. Maklumat masuk secara berlapis mengikut kebolehpercayaan yang semakin menurun — sejarah pilihan raya dahulu, kemudian pilihan raya kecil (PRK), seterusnya tinjauan pendapat, akhirnya berita — dan setiap lapisan hanya boleh melaraskan apa yang telah ditetapkan oleh lapisan-lapisan sebelumnya. Tiada satu lapisan pun, selantang mana pun suaranya, boleh mendominasi.
  3. Kejujuran tentang kekurangan data. Tinjauan pendapat awam di Malaysia jarang diadakan, tidak seragam dari segi kaedah, dan tertumpu pada kerusi majoriti Melayu di Semenanjung. Justeru, model mesti mampu menghasilkan ramalan yang boleh dipertahankan daripada faktor asas semata-mata, dengan tinjauan pendapat dan berita sekadar penambah baik.
  4. Realisme pada aras blok. Pilihan raya Malaysia dipertandingkan oleh gabungan-gabungan yang keanggotaannya berubah antara penggal Parlimen, malah dalam satu-satu penggal itu sendiri (Langkah Sheraton 2020 merombak seluruh peta politik tanpa pilihan raya). Justeru, unit ramalan ialah blok — kini PH, BN, PN, GPS, GRS, WARISAN, dan satu kumpulan baki, OTHERS — bukannya parti. Set blok dikekalkan sebagai data (jadual blocs berserta senarai keanggotaan yang dikurasi), maka setiap blok baharu ialah urusan kurasi, bukan perubahan kod; lihat panduan pembangunan.

2. Asas data

2.1 Sumber

DataSumberNota
Keputusan peringkat calon PRU15 (222 kerusi)Set data terbuka TindakMalaysia, disemak silang dengan warta SPRDimuatkan melalui pengubah (transformer) yang boleh diaudit; gerbang QA menyelaraskan setiap kerusi
Keputusan peringkat parti PRU14 (222 kerusi)Halaman keputusan Wikipedia mengikut kawasan, dihurai daripada wikitextJumlah gabungan sepadan dengan tepat dengan keputusan rasmi (BN 79, PH 113, PAS 18, WARISAN 8, STAR 1, IND 3)
PRN Melaka / Sarawak 2021 (28 + 82 kerusi)Halaman keputusan Wikipedia, dihurai daripada wikitextKeputusan sebenar dihasilkan dengan tepat: BN 21 (Melaka), GPS 76 (Sarawak)
PRN Johor 2022/2026, Negeri Sembilan 2023/2026, Sabah 2025Korpus keputusan MECo (peringkat calon)Johor 2026: BN 48/56; Negeri Sembilan 2026: BN+PN 25/36; Sabah 2025: GRS 34, WARISAN 20 — DUN tergantung
Enam PRN Ogos 2023 (Selangor, Negeri Sembilan, Pulau Pinang, Kedah, Kelantan, Terengganu)Korpus keputusan MECo (bahagian undi negeri agregat)Bukti lapisan ayunan (swing) sahaja — tiada dewan dibina atasnya
PRK selepas PRU15Halaman PRK Wikipedia (Kuala Terengganu, Pulai, Kemaman 2023)Penghuraian undi setara (like-for-like); Padang Serai 2022 dikira sebagai sebahagian PRU15
Daftar pengundiDemografi daftar pengundi SPR (fail Ogos 2025, TindakMalaysia)169/222 kerusi dikemas kini; yang selebihnya mengekalkan nilai PRU15
Sejarah keanggotaan gabunganmemberships.yaml yang dikuri dalam repositoriDisemak manusia dan bertarikh; boleh diedit apabila politik berubah
BeritaRSS (pertanyaan Google News, Malay Mail, FTM)Tajuk + ringkasan; kandungan berbayar tidak pernah diikis
Tinjauan pendapatKemasukan manual (Ilham Centre, Merdeka Center, EMIR Research)Dimasukkan dengan tarikh kerja lapangan dan saiz sampel

2.2 Keputusan nosional: memetakan semula sejarah ke dalam blok masa kini

Undi yang diberikan kepada Bersatu pada GE15 (ketika itu di dalam PN) masuk dengan tepat dalam lajur PN hari ini. Undi kepada Pejuang di bawah panji-panji Gerakan Tanah Air (GTA) pula termasuk dalam kumpulan OTHERS hari ini, kerana GTA bukan lagi satu kekuatan yang berdaya saing. Keputusan nosional menjawab soalan ini: bagaimanakah undi yang benar-benar diberikan pada pilihan raya E akan teragih dalam blok-blok masa kini?

Dua kaedah menghasilkan keputusan ini:

  • Penyerapan sejajar blok (digunakan bagi GE15): Set data TindakMalaysia memang sudah melaporkan undi mengikut blok hari ini, justeru setiap pencalonan membawa bloknya secara terus dan keputusan nosional hanyalah pengagregatan langsung undi calon ke dalam pasangan (kerusi, blok).
  • Pemetaan sejarah parti (digunakan bagi GE14): Parti bagi setiap pencalonan 2018 dipetakan kepada blok yang diikutinya pada tarikh pemuatan, melalui jadual coalition_membership yang bertarikh serta pengatasan coalition_bloc. Undi PPBM 2018 dikira untuk PN hari ini; undi BN 2018 di Sarawak (PBB/PRS/PDP/SUPP) dikira untuk GPS; undi PAS 2018 pula dikira untuk PN; kerusi BN PBS 2018 pula dikira untuk GRS. Parti yang kini tidak bernaung di bawah mana-mana blok (UPKO, PCS, BERJASA, ...) masuk ke dalam OTHERS.

Hasilnya ialah sejarah yang benar-benar mengambil kira penjajaran semula: agihan kerusi nosional GE14 menunjukkan PH 100, PN 56, BN 34, GPS 19, WARISAN 8 — undi PPBM+PAS yang akhirnya menjadi "gelombang hijau" 2022 sudah tampak dalam agihan undi 2018 sebaik sahaja ia dipetakan semula ke dalam blok masa kini.

Jadual nosional ialah satu-satunya input pilihan raya yang digunakan oleh model. Hal ini mengasingkan masalah penjajaran semula: apabila peta gabungan berubah, hanya keputusan nosional yang dikira semula, bukan model itu sendiri.

2.3 Gerbang kualiti data

Sebelum sebarang ramalan dijalankan, setiap pilihan raya dalam pangkalan data mesti lulus QA: jumlah undi blok setiap kerusi mesti sepadan dengan kiraan undi sah rasmi (kes penyekat (blocker) jika tersasar melebihi 0.1%), jumlah undi tidak boleh melebihi bilangan pengundi berdaftar, pemenang yang direkodkan mesti memegang undi maksimum kerusi itu, dan kadar keluar mengundi mesti berada dalam julat yang munasabah. Kes penyekat menghentikan aliran kerja lebih awal dan tidak meracuni ramalan.

3. Gambaran model

Bagi setiap kerusi $s$ dan blok $b$, model menghasilkan bahagian undi jangkaan $\mu_{s,b}$, kemudian simulasi Monte Carlo menukarkan bahagian undi itu kepada hasil kerusi. Bahagian jangkaan dibina dalam empat lapisan:

$$\mu_{s,b} = \underbrace{\text{baseline}{s,b}}{L1} \oplus \underbrace{\delta^{\text{nat}}b + \delta^{\text{state}}{s,b}}{L2\ \text{swing}} \oplus \underbrace{\text{poll-implied }\delta^{\text{nat}}b}{L3} \oplus \underbrace{\nu{s,b}}_{L4\ \text{semantic}}$$

dengan $\oplus$ menandakan penambahan dalam ruang bahagian undi diikuti penormalan semula, dan sumbangan setiap lapisan adalah terhad (§7 mengehad L4; §6 mengehad pemberat kepercayaan L3).

4. Lapisan 1 — Garis dasar (sejarah pilihan raya)

Susutan pemberat masa. Bagi setiap pilihan raya lepas $e$ pada jarak $\Delta_e$ tahun daripada tarikh ramalan:

$$w_e = \exp(-\lambda \Delta_e), \qquad \lambda = 0.5 \ \text{by default}$$

Separuh hayat dua tahun bagi satu pilihan raya: PRU14 (2018) akan masuk ke dalam ramalan era PRU16 dengan pemberat sekitar 15% bersebelahan 100% PRU15... dan PRU13 pada 2%. Politik Malaysia berubah dengan pantas; pilihan raya lama memberi maklumat tentang tekstur agihan kerusi, bukan pertarungan itu sendiri.

Undi berkesan. Dengan $v_{e,s,b}$ undi nosional dan $n_{e,s}$ undi sah:

$$v^{\text{eff}}{s,b} = \sum_e w_e, v{e,s,b}, \qquad n^{\text{eff}}s = \sum_e w_e, n{e,s}$$

Pengecutan berhierarki. Bahagian berpemberat masa mentah $\hat{p}{s,b} = v^{\text{eff}}{s,b} / n^{\text{eff}}_s$ dikecutkan ke arah bahagian negara blok itu $p_b^{\text{nat}}$ dengan jisim undi tiruan $m$:

$$\text{baseline}{s,b} = \frac{v^{\text{eff}}{s,b} + m, p_b^{\text{nat}}}{n^{\text{eff}}_s + m}, \qquad m = 800 \ \text{by default}$$

Ini ialah hierarki Bayes empirik dua aras (kerusi → negara; aras negeri dirancang). Tugasnya ialah pengawalan: kerusi yang sejarahnya nipis atau lapuk bergerak ke arah norma negara, manakala kerusi yang kaya data mengekalkan angkanya sendiri. Dengan $m=800$ berbanding kadar keluar mengundi berkesan lazim sebanyak 20,000–60,000, tarikannya sekitar 1.5–4% — cukup untuk melembutkan kerusi yang istimewa tanpa melakar semula peta. Dengan PRU12–PRU15 kini dimuatkan, pelicinan antara pilihan raya aktif: pada λ=0.5, pilihan raya sebelum 2018 membawa hanya ~2% pemberat, maka sumbangan utamanya ialah tekstur dalam agihan kerusi, bukan pertarungan itu sendiri.

Semakan penentukuran: dijalankan terhadap PRU15 sahaja (tanpa ayunan, tanpa tinjauan pendapat, tanpa berita), selang bilangan kerusi 80% model merangkumi keputusan sebenar setiap blok — PH sebenar 81 berbanding median ramalan 84 [80–88]; PN 74 berbanding 71 [68–75]; BN 30 berbanding 32 [29–36]; GPS 23 berbanding 20 [19–22]; GRS 6 berbanding 6; WARISAN 3 berbanding 3; OTHERS 5 berbanding 5.

5. Lapisan 2 — Ayunan (swing) (pilihan raya kecil)

Pilihan raya kecil antara pilihan raya umum ialah satu-satunya pergerakan undi yang dapat diperhatikan di Malaysia. Tiga PRK Dewan Rakyat telah berlaku selepas PRU15 — Kuala Terengganu (Ogos 2023), Pulai (September 2023), Kemaman (Disember 2023) — dan setiap satu dimuatkan dengan undi peringkat calon. (Padang Serai, diadakan 18 hari selepas PRU15 ekoran kematian seorang calon, dikira sebagai sebahagian PRU15.)

Pengukuran setara (like-for-like). Kerajaan perpaduan bermakna blok-blok kerap tidak bertanding dalam PRK yang mereka serahkan kepada rakan gabungan, dan ini secara mekanikalnya mengembahkan bahagian blok-blok yang selebihnya: PAS "menang" 84.96% di Kuala Terengganu sebahagiannya kerana BN tidak bertanding. Mengukur beza bahagian secara mentah akan melaporkan ayunan PN +20 mata yang sebenarnya hantu. Sebaliknya, bagi setiap kerusi kami hadkan kepada set blok yang bertanding dalam kedua-dua PRK dan pilihan raya asas, menormalkan semula bahagian kedua-dua pilihan raya kepada set bertanding itu, dan mengukur ayunan di dalamnya:

$$\text{swing}{s,b} = \frac{v^{\text{BE}}{s,b}}{\sum_{b' \in C_s} v^{\text{BE}}{s,b'}} - \frac{\text{baseline}{s,b}}{\sum_{b' \in C_s} \text{baseline}_{s,b'}}, \qquad C_s = {\text{blocs contesting both}}$$

Atas asas setara ini, PRN 2023 menunjukkan: PN +5.3 mata secara nasional, PH −4.2, BN −8.0 (Kemaman sahaja) — penyatuan PN yang sebenar di kawasan majoriti Melayu, satu peringkat magnitud lebih kecil daripada bacaan mentahnya.

L2b — ayunan pilihan raya negeri. Apabila sesebuah negeri mengundi lebih baru daripada pilihan raya umum asas, PRN negeri itu sendiri ialah bukti pilihan raya bagi kerusi Parlimen negeri tersebut. Lapan negeri kini memberi input kepada lapisan ini: Johor dan Negeri Sembilan (PRN pertengahan 2026, peringkat calon), Sabah (PRN 2025, peringkat calon), dan enam PRN Semenanjung Ogos 2023 (Selangor, Negeri Sembilan, Pulau Pinang, Kedah, Kelantan, Terengganu) yang dimuatkan sebagai bahagian undi negeri agregat — bukti Negeri Sembilan 2023 digantikan oleh PRN 2026nya di bawah peraturan terkini-per-negeri. Bagi setiap negeri sedemikian, ayunan setiap blok ialah

$$\delta^{\text{PRN}}{j,b} = \left(p^{\text{PRN}}{j,b} - \bar{p}^{\text{baseline}}{j,b}\right) \cdot \underbrace{0.5^{a_j / 365\text{d}}}{\text{age decay}} \cdot \underbrace{0.5}_{\text{structure shrink}}$$

dikecutkan dua kali: bukti memudar dengan separuh hayat 365 hari, dan diskaun struktur 50% kerana pertarungan DUN mempunyai struktur berbilang penjuru dan rundingan kerusi yang berbeza daripada pertarungan persekutuan (pertarungan lurus BN+PN di Negeri Sembilan, blok yang tidak bertanding di Johor). Separuh hayat ini dicalibrated semula daripada 120 hari pada mulanya selepas main semula Johor 2022→2026 (§10) menunjukkan undi negeri berumur empat tahun masih memperuntukkan 94.6% kerusi dengan betul — separuh hayat 120 hari akan memadam bukti PRN yang baharu bertahun-tahun sebelum pertarungan persekutuan seterusnya. Ayunan ini ditambah kepada baki negeri daripada PRK dan dikenakan pada kerusi Parlimen negeri itu melalui mekanisme ayunan seragam yang sama. Setakat Oktober 2026, lapisan ini menunjukkan Johor BN +11 / PN −9, Sabah GRS +4.6 / PH −5.6, dan peningkatan PN kecil yang terkena susutan usia (+0.5–0.9) di negeri-negeri utara daripada bukti 2023.

Daripada kerusi kepada ayunan nasional. Ayunan peringkat negara setiap blok ialah min ayunan kerusi PRK-nya, kemudian dikecutkan ke arah sifar mengikut saiz sampel dengan $k_{be} = 4$ kerusi tiruan:

$$\delta^{\text{nat}}_b = \frac{n}{n + 4},\overline{\text{swing}}_b$$

maka tiga kerusi membawa 43% daripada nilai muka mereka. Ia kemudian dicampur dengan ayunan tersirat tinjauan pendapat (§6) mengikut pemberat. Ayunan negeri dikecutkan ke arah nilai negara dengan $k=2$ kerusi tiruan, menghasilkan penguraian seragam-tambah-serantau (penggeneralan UNS Butler). Ini penting di Malaysia — "gelombang hijau" 2022–23 tertumpu secara serantau, dan ujian balik (§10) mengukur berapa banyak tumpuan serantau itu menjejaskan model ayunan seragam semata-mata.

Apabila tiada PRK dimuatkan, L2 menyumbang sifar dan ramalan terdiri daripada garis dasar + L3 + L4 sahaja.

6. Lapisan 3 — Tinjauan pendapat

Tinjauan pendapat tidak pernah menyentuh angka peringkat kerusi secara langsung. Ia melaraskan bahagian undi peringkat negara, yang tersebar melalui mekanisme ayunan seragam yang sama seperti L2 — satu mekanisme, dua sumber bukti.

Pemberat susutan. Bagi tinjauan pendapat $i$ yang berumur $a_i$ hari dengan saiz sampel $n_i$:

$$w_i = 0.5^{a_i / 45} \cdot \sqrt{n_i} \quad (\text{45-day half-life; } n_i \text{ defaults to 500 if unreported})$$

Tinjauan pendapat yang lebih tua daripada enam separuh hayat (270 hari) digugurkan sepenuhnya. Bahagian blok setiap tinjauan dinormalkan semula supaya berjumlah 1 sebelum pengagregatan.

Had kepercayaan (trust cap). Dengan $N$ tinjauan pendapat berbeza dalam tempoh data:

$$\kappa = \min(0.7,\ 0.25,N)$$

Maka satu tinjauan menggerakkan anggaran negara sebanyak 25%, tiga tinjauan sebanyak 70% (hadnya), dan garis dasar sentiasa mengekalkan sekurang-kurangnya 30%. Bahagian negara campuran dinormalkan semula antara blok, dan ayunan negara tersirat $\delta^{\text{poll}}b = p^{\text{blended}}b - p^{\text{baseline}}b$ digabungkan dengan ayunan PRK daripada L2 mengikut kadar pemberat masing-masing ($w{\text{polls}} = \kappa$; $w{\text{BE}} = \min(1, n{\text{BE seats}}/8)$).

Ini ialah versi agregasi tinjauan dinamik yang sengaja konservatif, seiring semangat Linzer (2013); kesan rumah (house effects) belum dimodelkan kerana bilangan syarikat tinjauan Malaysia yang boleh digunakan bagi setiap kitaran hampir-hampir melebihi dua sahaja — tidak cukup untuk mengenal pasti parameter kesan rumah. Apabila satu siri tinjauan terkumpul, ofset rumah dan gred syarikat tinjauan (yang sudah disimpan) akan masuk ke dalam pemberat.

7. Lapisan 4 — Semantik (berita, mingguan)

Lapisan semantik menukarkan berita yang telah ditanda kepada penyesuaian kecil peringkat kerusi yang terhad. Ia berjalan setiap minggu dan inilah lapisan yang paling dirasai pengguna antara pilihan raya.

Aliran kerja setiap kitaran mingguan:

  1. Kumpul — suapan RSS (pertanyaan Google News mengikut topik, suapan penerbit terus) → news_articles (kekal, dinyahpendua melalui URL).
  2. Tanda — setiap artikel dipautkan kepada entiti (kerusi, parti, gabungan) dan diskor untuk sentimen serta kerelevanan setiap blok. Dua penanda yang boleh ditukar ganti berkongsi satu skema:
    • fallback (sentiasa aktif): padanan kata kunci/regex deterministik terhadap daftar kerusi dan parti, dengan leksikon politik Melayu/Inggeris untuk sentimen. Kos sifar, boleh dihasilkan semula sepenuhnya.
    • LLM (apabila LLM_API_KEY ditetapkan): model serasi OpenAI menjalankan pengekstrakan entiti dan pemarkahan sentimen setiap blok di bawah kontrak JSON yang ketat. Penanda deterministik kekal sebagai lantai — LLM hanya memperhalus.
  3. Benam (apabila kunci ditetapkan): vektor artikel disimpan dalam pgvector untuk penyahpenduaan semantik dan pengambilan liputan yang berkaitan dengan kerusi.
  4. Skor — bagi setiap kerusi $s$ dan blok $b$ dalam tempoh 28 hari:

$$\text{signal}{s,b} = \sum{a \in \text{articles}(s)} \text{relevance}a \cdot \text{sentiment}{a,b}$$

  1. Piawai dan had — dinormalkan antara kerusi bagi setiap blok:

$$z_{s,b} = \frac{\text{signal}{s,b} - \overline{\text{signal}}b}{\sigma_b}, \qquad \nu{s,b} = \operatorname{clip}\left(0.01 \cdot \kappa{\text{sem}} \cdot z_{s,b},\ -0.02,\ +0.02\right)$$

dengan $\kappa_{\text{sem}} = 1.0$. Satu sisihan piawai isyarat berita dengan itu menggerakkan sesebuah kerusi sebanyak satu mata bahagian undi, dan tiada banyak mana pun berita boleh menggerakkan bahagian undi kerusi-blok melebihi dua mata — jaminan rasmi bahawa tajuk berita semata-mata tidak boleh menggoncang ramalan. Dalam ruang bahagian undi, suntikan-suntikan ini berjumlah dengan L1–L3 dan barisnya dinormalkan semula.

Mempiawaikan dan bukannya guna sentimen mentah? Skor sentimen mutlak bergantung kepada penanda dan tidak berhad; skor-z mengukur tekanan berita relatif antara kerusi — itulah kuantiti yang relevan untuk keputusan ("kerusi mana yang sedang digerakkan kitaran berita?") — dan klip menghad unit itu tanpa mengira hanyut penentukuran penanda.

8. Kitaran analisis mingguan

Pekerja berjalan pada kadar adaptif (HK_CYCLE_DAYS=auto): setiap 7 hari dalam tempoh tenang, setiap 3 hari apabila pilihan raya bertarikh berada dalam 60 hari, dan setiap 24 jam sepanjang tempoh kempen (daripada hari penamaan ≈ hari mengundi − 14 hari hingga hari mengundi). Tikan harian keputusan mengira semula selang itu daripada kalendar pilihan raya, maka pembubaran mengejut memendekkan kitaran dalam masa sehari. Setiap kitaran menjalankan:

collect → tag → embed → notional-refresh → QA gates → forecast → persist

Keputusan nosional dikira semula pada setiap kitaran (murah) supaya suntingan peta gabungan berkuat kuasa serta-merta. Kes penyekat QA menghentikan proses sebelum ramalan. Larian ramalan kemudian dilaksanakan mengikut susunan tetap L1 → L2 → L3 → L4 → simulasi dan menyimpan:

  • forecast_seat_probs: setiap kerusi dan blok — kebarangkalian menang, bahagian undi jangkaan, σ.
  • forecast_summaries: setiap blok — median/min purata kerusi dan selang p05/p10/p90/p95.
  • forecast_metrics: P(parlimen tergantung), P(blok kerajaan ≥ 112 / ≥ 149), P(blok terbesar).
  • metadata larian: versi model, semua hiperparameter, dan cincangan input.

Larian bersifat tambahan sahaja. Laman sentiasa memaparkan larian terkini; keseluruhan sejarah disimpan, maka pergerakan ramalan itu sendiri dari masa ke masa boleh diaudit kemudian.

9. Daripada bahagian undi kepada kerusi: simulasi

Pertarungan Malaysia secara lalainya berbilang penjuru (PRU15 mencatat purata ~4 calon setiap kerusi, dengan 3+ blok serius di kerusi majoriti Melayu). Jalan pintas kebarangkalian menang berpasangan tidak bertahan dalam keadaan ini; HitungKerusi mensimulasikan vektor bahagian undi penuh setiap kerusi secara bersama, dengan ketidakpastian berkorelasi serantau:

  1. Cabut satu kejutan negeri bagi setiap negeri dan blok: $z_{j,b} \sim \mathcal{N}(0, \sigma_{\text{state}})$, dikenakan pada setiap kerusi dalam negeri $j$ — kerusi dalam negeri yang sama bergerak bersama dalam satu simulasi.
  2. Cabut satu gangguan kerusi bebas: $\varepsilon_{s,b} \sim \mathcal{N}(0, \sigma_{\text{seat}})$.
  3. $\tilde{p}{s,b} = \mu{s,b} + z_{\text{state}(s),b} + \varepsilon_{s,b}$, dihadkan pada lantai 0.2% dan dinormalkan semula.
  4. Pemenang kerusi $s$ dalam cabutan $d$ ialah $\arg\max_b \tilde{p}_{s,b}$.

Kemeruan mengikut tempoh. Ketidakpastian membesar dengan masa sehingga pilihan raya sebagai ragutan rawak teredam:

$$\sigma_{\text{total}}(t) = \min\left(0.16,; 0.045\sqrt{1 + t/168\text{ days}}\right)$$

berpegang pada kedua-dua hujung: 4.5 mata bahagian undi dalam jangka dekat (kitaran mingguan menggerakkan sedikit sahaja), ~14–15 mata pada tempoh empat tahun (σ ayunan setiap blok empirik PRU14→PRU15 ialah 16.2). Pecahan antara dua komponen itu ialah $\sigma_{\text{seat}} = \sqrt{1-\rho},\sigma_{\text{total}}$ dan $\sigma_{\text{state}} = \sqrt{\rho},\sigma_{\text{total}}$ dengan $\rho = 0.4$: 40% daripada varians bersifat serantau. Hari mengundi jangkaan setiap dewan memacu $t$ — Melaka 14 Nov 2026, Sarawak awal 2027, Sabah ~2030, Johor dan Negeri Sembilan ~2031, parlimen pada tarikh akhir pembubaran automatiknya (semuanya boleh diatasi melalui HK_POLLING_DAY_*).

Daripada 10,000 cabutan, ini menghasilkan kebarangkalian menang setiap kerusi, agihan bilangan kerusi penuh setiap blok, dan metrik utama: P(tiada satu blok ≥ majoriti), P(kerajaan ≥ majoriti / dua pertiga), dan P(blok terbesar) setiap blok.

10. Ujian balik dan penentukuran

Dengan PRU14 dan PRU15 kedua-duanya dimuatkan, harness memainkan semula model seolah-olah hanya keputusan nosional PRU14 diketahui, mengenakan ayunan sebenar negara yang berlaku menjelang 2022 ("ayunan oracle" — mengasingkan ralat peruntukan kerusi daripada ralat pergerakan negara), dan menykor kebarangkalian menang kerusi yang terhasil berbanding pemenang PRU15 yang sebenar.

Kemeruan empirik dahulu. Agihan ayunan aras kerusi PRU14→PRU15 mempunyai sisihan piawai 16.2 mata setiap blok dipertandingkan (purata ayunan mutlak 12.7; σ ayunan bahagian pemenang 10.3). Kemeruan pilihan raya Malaysia dalam kitaran empat tahun yang penuh penjajaran semula dan berlaku pertengahan pandemik adalah sangat besar mengikut piawaian antarabangsa — inilah jangkar bagi seberapa lebar selang tempoh panjang mesti.

Main semula berantai merentas era (model calibrated — σ tempoh + kejutan negeri, ayunan negara oracle; ablation PRU14→PRU15 yang memotivasikan model calibrated dikekalkan di bawahnya):

Main semulaEraσBrierKetepatan pemenangLiputan 80%
PRU12→PRU13 (2008→2013)era BN stabil0.1570.23685.1%100%
PRU13→PRU14 (2013→2018)perubahan struktur besar0.1550.47968.9%29%
PRU14→PRU15 (2018→2022)penjajaran semula0.1480.39669.8%43%
tekaan rawak seragam——0.857~14%—

Ablation PRU14→PRU15 (mengapa model calibrated ialah model yang digunakan):

Varian modelσ digunakanBrierKetepatan pemenangLiputan 80%
σ jangka dekat, kerusi bebas0.0450.50569.8%0%
σ dilebarkan rata, kerusi bebas0.1000.42669.8%29%
calibrated: σ(t)=0.148 + kejutan negeri (ρ=0.4)0.1480.39669.8%43%

Bacaannya: kemahiran model menjejaki kestabilan sistem parti. Dalam era stabil 2008→2013 ia cemerlang (Brier 0.24, ketepatan 85%, selang tercalibrasi penuh); ia merosot tepat pada dua titik putus sistemik — perubahan struktur besar 2018 dan penjajaran semula 2022 — ketika hingar aras bahagian undi tidak dapat mewakili kimia blok yang berubah (pemetaan semula nosional mengurangkan, tetapi tidak menghapuskan, perkara ini). Main semula PRU16 akan menyertai jadual ini apabila keputusan keluar, apa sahaja jangkanya.

Pengesahan dewan negeri (kebenaran asas 2023–2026). Harness yang sama memainkan semula setiap pilihan raya DUN yang dimuatkan daripada pilihan raya DUN sebelumnya bagi negeri tersebut — ujian luar sampel (out-of-sample) yang pertama dan benar-benar tidak berat sebelah terhadap pilihan raya yang tidak pernah dilihat model:

Main semulaTempohBrierKetepatan pemenangLiputan 80%
PRN Johor 2022 → 20264.3 tahun0.09694.6%100%
PRN Negeri Sembilan 2023 → 20263.0 tahun0.53769.4%57%

Johor ialah model pada tahap terbaiknya: penyatuan BN sudah kelihatan dalam undi negeri 2022 dan main semula yang tercalibrasi meramal dengan betul 53 daripada 56 kerusi. Negeri Sembilan ialah penemuan titik putus sistemik dalam bentuk mini — gabungan BN+PN 2026 bertanding dalam pertarungan lurus yang menggabungkan semula undi dua blok, tepat perubahan kimia yang tidak dapat diwakili oleh hingar bahagian undi. Bacaan praktikalnya sepadan dengan rantai persekutuan: dalam struktur blok yang stabil, ramalan negeri adalah tajam; apabila gabungan menggabung semula, selang melebar secara jujur tetapi median bersandar pada struktur yang lapuk.

Skor-skor ini dikira dengan ayunan negara oracle, maka ia mengukur jentera peruntukan kerusi, bukan ramalan pergerakan negara yang (jauh lebih sukar). Semakan penentukuran dalam sampel dalam §4 (bilangan sebenar setiap blok PRU15 di dalam jalang 80% model pada parameter hari mengundi) kekal sebagai bukti pelengkap.

11. Andaian dan kekangan

  1. Sempadan dianggap beku. Sempadan kawasan pilihan raya (tidak berubah sejak 2003... dengan proses persempadanan 2018 sebagai urusan yang terakhir) diandaikan tetap sepanjang tempoh ramalan.
  2. Kesan calon ialah hingar setempat. Pencalonan individu yang luar biasa kuat diserap ke dalam σ, bukan dimodelkan; pengumuman calon pula masuk hanya melalui lapisan semantik.
  3. Kadar keluar mengundi bersifat tersirat. Agihan merujuk kepada undi sah; perbezaan kadar keluar mengundi antara kumpulan pengundi (contohnya penurunan kepada 73.9% pada 2022, atau lonjakan kadar keluar mengundi penyokong teras PAS) ialah risiko sistematik yang telah dikenal pasti tetapi belum dimodelkan. Lapisan kadar keluar mengundi sudah dirancang, dan ia akan diwujudkan setelah data kadar keluar mengundi PRK dimuatkan.
  4. Tinjauan pendapat jarang diadakan dan mungkin berat sebelah. Had kepercayaan (trust cap) serta pengecutan yang berat dibuat justru untuk mencerminkan keadaan ini; model tidak pernah memerlukan tinjauan pendapat.
  5. Lapisan semantik sengaja dihadkan — ia mengesan anjakan relatif dalam tekanan berita, bukan perubahan struktur yang besar. Gempa politik yang sebenar (keruntuhan sesebuah gabungan) masuk ke dalam model melalui peta gabungan yang dikurasi dan pengiraan semula nosional, bukan melalui skor sentimen. Pengesanan itu dibantu, bukan berlaku secara automatik: pemantauan pakatan harian (hk unknown-terms) menanda frasa kata nama khas yang sedang hangat diperkatakan tetapi tidak dikenali oleh mana-mana daftar, lalu memulakan urusan kurasi yang disemak — senarai putih penanda entiti itulah yang menjamin tiada entiti yang belum disemak akan sampai ke dalam data.
  6. Kekaburan Sarawak/Sabah. Dinamik dalaman GPS/GRS (rundingan kerusi, parti tempatan) jarang sekali diberi perhatian oleh liputan berita nasional; garis dasar kedua-duanya pula datang hampir sepenuhnya daripada sejarah, dan itu boleh dikatakan betul. Satu artifak DUN yang berkaitan: kumpulan OTHERS mengagregat semua calon kecil, maka di kerusi berbilang penjuru, jumlah undi bersama kumpulan itu boleh melebihi undi pemenang GPS — bilangan "pemenang" nosional kemudiannya memperkecil bilangan blok dominan (Sarawak 2021 menunjukkan GPS 70 nosional berbanding 76 sebenar). Pengecutan berhierarki ke arah bahagian undi seluruh dewan membetulkan kebanyakan kejanggalan ini (median ramalan Sarawak semasa ialah GPS 80), tetapi ia tetap satu bias pengagregatan yang diketahui — didokumenkan di sini, bukan disembunyikan.
  7. Lompat parti antara pilihan raya hanya mengubah paparan "komposisi semasa", bukan ramalan itu sendiri, kerana ramalan berkisar tentang pertarungan blok pada pilihan raya seterusnya. Penjajaran semula yang berlaku pada masa lampau pula dikendalikan oleh pengiraan semula nosional.
  8. Garis dasar DUN berasaskan satu pilihan raya sahaja. Setiap dewan negeri bersandar pada PRN terbarunya semata-mata (Melaka 2021, Sarawak 2021, Johor 2026, Negeri Sembilan 2026, Sabah 2025; PRN-PRN yang lebih lama, jika dimasukkan sekalipun, hanya akan terkena susutan pemberat masa yang berat), maka antara dua pilihan raya, pergerakan mereka hampir keseluruhannya datang daripada lapisan semantik, sehinggalah hadirnya pilihan raya kecil atau tinjauan pendapat yang baharu. Ketika kempen sedang berjalan, keadaan ini menjadikan ramalan mereka responsif terhadap berita, sekaligus terus terang tentang hal itu.

12. Jangkar akademik

  • Butler, D. (1951). The British General Election of 1951 — asal usul ayunan seragam.
  • Linzer, D. (2013). "Dynamic Bayesian Forecasting of Presidential Elections in the States." Journal of the American Statistical Association 108(501).
  • Jackman, S. (2005). "Incumbency Advantage and Candidate Choice." American Journal of Political Science — pemodelan ayunan/varians aras kerusi.
  • Gelman, A., Carlin, J., Stern, H., Dunson, D., Vehtari, A., Rubin, D. (2013). Bayesian Data Analysis, ed. ke-3 — pengecutan berhierarki.
  • Tavits, G. dan lain-lain tentang model kerusi-undi multipartai — penormalan semula bahagian undi berbilang blok.
  • Ufen, A. (2020). "Opposition Coalitions in Democratizing Southeast Asia." Government and Opposition — konteks penjajaran semula gabungan bagi Malaysia.

Lampiran A — Rujukan parameter

ParameterLalaiPembolehubah persekitaranPeranan
λ (susutan)0.5 / tahunHK_LAMBDA_DECAYseparuh hayat sejarah ≈ 2 tahun
m (pengecutan)800 undiHK_PRIOR_STRENGTHjisim tiruan hierarki
σ (kerusi, jangka dekat)0.045HK_SIGMA_SEATkemeruan bahagian undi pada tempoh sifar
τ tempoh σ168 hariHK_SIGMA_TAU_DAYSmasa rehat ragutan rawak
had σ0.16HK_SIGMA_CAPkemeruan jumlah maksimum
bahagian negeri ρ0.4HK_RHO_STATEpecahan varians yang bersifat serantau
separuh hayat ayunan PRN365 hariHK_PRN_SWING_HALF_LIFEsusutan bukti pilihan raya negeri (dicalibrated semula daripada 120 hari atas bukti main semula Johor, §5/§10)
diskaun struktur PRN0.5HK_PRN_STRUCTURE_SHRINKdiskaun pertarungan DUN berbanding persekutuan
hari mengundimengikut dewanHK_POLLING_DAY_*tarikh pilihan raya jangkaan yang memacu σ(t)
k_be (pengecutan PRK)4 kerusi—pengecutan ayunan negara PRK ke arah sifar
separuh hayat tinjauan45 hariHK_POLL_HALF_LIFEsusutan tinjauan pendapat
had kepercayaan tinjauan κmin(0.7, 0.25·N)—pengaruh maksimum tinjauan pendapat
had semantik0.02HK_SEMANTIC_CAPmagnitud penyesuaian maksimum
κ semantik1.0HK_SEMANTIC_KAPPAskala z → mata
tempoh semantik28 hariHK_SEMANTIC_WINDOW_DAYSsorotan balik berita
cabutan10,000HK_SIM_DRAWSsaiz Monte Carlo
majoriti112 / 15 / 42 / 29 / 19 / 37—majoriti mudah (Dewan Rakyat / Melaka / Sarawak / Johor / NS / Sabah)
dua pertiga149 / 19 / 55 / 38 / 24 / 49—garis dua pertiga, susunan dewan yang sama
blok kerajaanmengikut dewan (parlimen PH+BN; Melaka/NS BN+PN; Sarawak GPS; Johor BN; Sabah GRS)HK_GOV_BLOCSsusunan penyandang yang memacu metrik kerajaan

Lampiran B — Menghasilkan semula satu larian

make weekly                      # collect → tag → notional → QA → forecast
psql> SELECT id, created_at, inputs_hash FROM forecast_runs ORDER BY id DESC LIMIT 1;

inputs_hash meliputi setiap bingkai data input berserta set parameter; dua larian dengan cincangan yang sama menghasilkan output yang sama, tertakluk kepada benih Monte Carlo (ditetapkan tetap bagi setiap larian secara lalai demi kebolehhasilan semula yang tepat).