Nexa Intelligence Docs
Pipeline Data

trending_topics

Alur deteksi lonjakan kecepatan isu (velocity spike 3.5x SD), kalkulasi peringkat tren harian (Top 10), dan pengisian indeks Elasticsearch trending_topics untuk panel Trending Topics dan mentions.

Pipeline Data: trending_topics (Tren Topik Nasional)

Pipeline ini bertugas mendeteksi pergeseran topik pembicaraan publik terpopuler, menghitung momentum pergerakan peringkat isu (Top 10), serta mengidentifikasi anomali lonjakan kemunculan berita secara mendadak (velocity spike) untuk diindeks ke dalam indeks Elasticsearch trending_topics.

Berbeda dari issue_dashboard yang berfokus pada pemetaan band risiko dari seluruh daun taksonomi, indeks trending_topics berfokus pada peringkat popularitas (rank #1 s.d. #10), volume liputan media (article_count), dan dinamika percepatan narasi harian (trend trajectory).

Indeks ini menjadi pemasok data utama untuk widget Trending Topics di layar /dashboard/overview (GET /trending-topics) dan modal detail sebutan artikel (GET /trending-topics/:id/mentions).


1. Ringkasan Arsitektur Alur

[C2 Deduplication Worker & PostgreSQL: articles]
(Artikel unik & artikel sindikasi anak dari seluruh portal media)
                       │
                       ▼
           [nexa-aggregation Worker]
           • Hitung volume kemunculan artikel per topik per jendela 24 jam
           • Bandingkan volume per jam (Vt) terhadap baseline historis 7 hari
           • Evaluasi ambang batas lonjakan: Vt > Mean(V_baseline) + (3.5 * Sigma)
           • Hitung delta pergerakan peringkat (trend: naik / turun / baru)
           • Ekstraksi entitas kunci (top_entities) & frasa dominan (top_keywords)
                       │
                       ▼
        [Elasticsearch: trending_topics]
        (1 dokumen per topik peringkat harian, period: 24h)
                       │
                       ├─────────────────────────────────────┐
                       ▼                                     ▼
        [GET /trending-topics]             [GET /trending-topics/:id/mentions]
        (Daftar Top 10 Tren Nasional)      (Rekonstruksi artikel rujukan via ES)

Alur Aggregation Worker (`nexa-aggregation`)

Kompilasi metrik statistik, rolling trends, agregasi sentimen wilayah, dan caching

01. Query Windowed IndicesElasticsearch: 1h / 24h / 7d

Menarik subset dokumen berita dan media sosial berdasarkan jendela waktu pemantauan.

02. Rolling Metric & Sentiment AggregatorVolume • Share of Voice • Net Sentiment

Menghitung agregasi volume postingan, rasio sentimen positif/negatif, dan lonjakan isu seketika.

03. Geo-Spatial & Topic ClusteringProvinsi / Kab / Kota

Mengelompokkan isu berdasarkan 38 provinsi di Indonesia untuk kebutuhan visualisasi peta digital twin.

04. Timescale Storage & Fast CachingPostgreSQL • Redis In-Memory

Menyimpan tabel agregasi ke database relasional dan memperbarui cache Redis untuk respons API instan.


2. Mesin Deteksi Kecepatan (Velocity Spike Engine)

Worker nexa-aggregation memantau laju pergerakan setiap topik secara berkala dengan algoritma statistik deteksi lonjakan anomali:

Formula Ambang Batas Lonjakan (Velocity Spike):
Vt > Mean(V_baseline) + (3.5 * Sigma)
  1. Kalkulasi Baseline 7 Hari: Sistem menghitung rata-rata kemunculan artikel per jam Mean(V_baseline) dan standar deviasinya Sigma selama periode 7 hari sebelumnya untuk topik yang sama.
  2. Evaluasi Laju Terkini (Vt): Jika laju kemunculan artikel dalam jendela terkini melampaui 3.5x standar deviasi di atas rata-rata baseline, topik tersebut otomatis ditandai sebagai mengalami lonjakan viralitas mendadak (Velocity Spike).
  3. Penentuan Nilai trend: Worker membandingkan posisi peringkat hari ini terhadap hari sebelumnya:
    • Nilai positif (+1, +2, ...): Peringkat naik dibandingkan hari sebelumnya.
    • Nilai nol (0): Peringkat stagnan / stabil.
    • Nilai negatif (-1, -2, ...): Peringkat menurun.
    • Nilai null: Topik baru muncul pertama kali pada jendela hari ini (new entry).

Worker menerbitkan tepat satu dokumen per topik per jendela harian (period: 24h):

{
  "_id": "trend_swasembada_energi_2026-09-26",
  "rank": 1,
  "issue": "Akselerasi Transisi Pembangkit Listrik EBT",
  "taxonomy": {
    "l1": "Energi",
    "l2": "Ketenagalistrikan",
    "l3": "Energi Terbarukan",
    "leaf": "Pembangkit Listrik Tenaga Surya"
  },
  "article_count": 86,
  "avg_risk": 0.24,
  "risk_level": "RENDAH",
  "sentiment": "Positif",
  "province": "DKI Jakarta",
  "top_entities": ["Kementerian ESDM", "PLN", "Bahlil Lahadalia"],
  "top_keywords": ["PLTS", "surplus listrik", "transisi energi"],
  "similarity": {
    "avg_score": 0.88,
    "duplicate_pair": 14
  },
  "trend": 2,
  "representative_article_id": "a9182374-f321-4a90-8e12-b09182374abc",
  "generated_at": "2026-09-26T04:00:00Z",
  "generated_from": {
    "start": "2026-09-25T00:00:00Z",
    "end": "2026-09-25T23:59:59Z"
  }
}

Dokumen di indeks trending_topics tidak menyimpan seluruh isi artikel di dalamnya untuk menjaga efisiensi penyimpanan (storage footprint).

Ketika pengguna mengklik salah satu baris topik tren di dashboard:

  1. Frontend memanggil endpoint API GET /trending-topics/:id/mentions.
  2. Backend merekonstruksi daftar artikel yang relevan dengan melakukan query pencarian teks ke indeks articles berdasarkan kombinasi frasa issue dan taxonomy.leaf.
  3. Menghasilkan daftar artikel rujukan yang memuat judul, nama penerbit portal media, waktu terbit, dan cuplikan kalimat yang menyebutkan isu tersebut.

5. Ringkasan Parameter Operasional Pipeline

ParameterKonfigurasiKeterangan
Indeks Targettrending_topics (Elasticsearch)Klaster OLAP penopang panel Trending Topics.
Worker Pemrosesnexa-aggregationVelocity engine dan daily ranking aggregator.
Batas RankingTop 10 per Hari (Window 24h)Menampilkan 10 isu teratas dengan volume dan lonjakan tertinggi.
Formula AnomaliAmbang batas 3.5 * SigmaMendeteksi ledakan berita viral yang tidak biasa.
Endpoint APIGET /trending-topics
GET /trending-topics/:id/mentions
Memasok widget tren di layar utama dan modal investigasi artikel.

6. Spesifikasi Payload Request Pipeline

Payload query agregasi harian yang dijalankan oleh worker nexa-aggregation ke indeks articles untuk menyusun peringkat topik:

POST /articles/_search
{
  "size": 0,
  "query": {
    "range": {
      "processed_at": {
        "gte": "2026-09-25T00:00:00",
        "lt": "2026-09-26T00:00:00",
        "time_zone": "+07:00"
      }
    }
  },
  "aggs": {
    "by_topic": {
      "terms": {
        "field": "taxonomy.level_2.keyword",
        "size": 50
      },
      "aggs": {
        "avg_risk": { "avg": { "field": "risk_score" } },
        "dominant_sentiment": {
          "terms": { "field": "sentiment.label", "size": 1 }
        },
        "top_entities": {
          "terms": { "field": "entities.name.keyword", "size": 5 }
        }
      }
    }
  }
}

On this page