Statistik pada Bagian 6 mengukur besar ayunan, tetapi diam pada satu pertanyaan: ke mana arahnya? Pertanyaan Q3 dari Bagian 1 — adakah komoditas yang harganya menanjak perlahan tetapi konsisten — menuntut kita melihat urutan waktu secara sengaja. Bagian ini memakai dua pembandingan sederhana (awal versus akhir, dan dua pekan awal versus dua pekan akhir), lalu meletakkan lonjakan M4–M5 pada konteks musim hujan. Kita tutup dengan kejujuran yang wajib: delapan pekan itu periode yang pendek.

Tren Sederhana: Awal versus Akhir #

Cara paling sederhana membaca arah adalah membandingkan ujung-ujung periode — harga M1 dengan harga M8:

python
import pandas as pd

# Resep pembersihan Bagian 4: 41 baris mentah menjadi 40 baris bersih.
df = pd.read_csv("../data/harga_komoditas.csv")
df = df.drop_duplicates(subset=["minggu", "komoditas"], keep="first").copy()
df["komoditas"] = df["komoditas"].str.strip().str.lower()
df["harga_rata_ribu"] = pd.to_numeric(df["harga_rata_ribu"], errors="coerce")
df = df.sort_values(["komoditas", "minggu"])
df["harga_rata_ribu"] = df.groupby("komoditas")["harga_rata_ribu"].transform(
    lambda s: s.interpolate()
)
pivot = df.pivot(index="minggu", columns="komoditas", values="harga_rata_ribu")

tren = pd.DataFrame({"awal_m1": pivot.iloc[0], "akhir_m8": pivot.iloc[-1]})
tren["selisih"] = tren["akhir_m8"] - tren["awal_m1"]
tren["pct"] = tren["selisih"] / tren["awal_m1"] * 100
print(tren.round(2).to_string())

Output yang Dihasilkan:

text
              awal_m1  akhir_m8  selisih    pct
komoditas                                      
ayam broiler     33.0      35.2      2.2   6.67
bawang merah     30.0      35.0      5.0  16.67
beras            13.0      13.5      0.5   3.85
cabai merah      38.0      40.0      2.0   5.26
gula pasir       17.5      17.8      0.3   1.71

Kelima komoditas menutup periode lebih tinggi daripada pembukaannya — tidak ada yang menurun delapan pekan. Dua hal perlu dibaca hati-hati:

  1. Bawang merah mencatat pct terbesar (16.67%), padahal pada Bagian 6 kita tahu bawang justru naik-turun tanpa arah yang jelas. Bandingkan M1 (30.0) dan M8 (35.0) saja memang mudah menipu: dua titik ujung mengabaikan enam pekan di antaranya.
  2. Cabai merah hanya +5.26% — padahal sempat menembus 78.0. Ujung-ujung yang rata menutup bentuk “bukit” yang kita tahu ada di tengah. Tren ujung-ke-ujung perlu disandingkan dengan bentuk perjalanannya.

Meratakan Guncangan: Dua Pekan Awal versus Dua Pekan Akhir #

Karena satu titik mudah goyah, kita stabilkan kedua ujung dengan rata-rata dua pekan:

python
import pandas as pd

df = pd.read_csv("../data/harga_komoditas.csv")
df = df.drop_duplicates(subset=["minggu", "komoditas"], keep="first").copy()
df["komoditas"] = df["komoditas"].str.strip().str.lower()
df["harga_rata_ribu"] = pd.to_numeric(df["harga_rata_ribu"], errors="coerce")
df = df.sort_values(["komoditas", "minggu"])
df["harga_rata_ribu"] = df.groupby("komoditas")["harga_rata_ribu"].transform(
    lambda s: s.interpolate()
)
pivot = df.pivot(index="minggu", columns="komoditas", values="harga_rata_ribu")

banding = pd.DataFrame(
    {
        "rata_m1_m2": pivot.loc[["M1", "M2"]].mean(),
        "rata_m7_m8": pivot.loc[["M7", "M8"]].mean(),
    }
)
banding["selisih"] = banding["rata_m7_m8"] - banding["rata_m1_m2"]
print(banding.round(2).to_string())
print()
naik_ayam = (pivot["ayam broiler"].diff().dropna() > 0).sum()
print(f"ayam broiler naik pada {naik_ayam} dari 7 perubahan pekan")

Output yang Dihasilkan:

text
              rata_m1_m2  rata_m7_m8  selisih
komoditas                                    
ayam broiler       33.25       35.00     1.75
bawang merah       32.00       33.50     1.50
beras              13.10       13.40     0.30
cabai merah        39.00       42.00     3.00
gula pasir         17.55       17.75     0.20

ayam broiler naik pada 6 dari 7 perubahan pekan

Tabel dengan ujung yang dirata-rata memberi gambaran yang lebih tenang dan tetap konsisten: semua komoditas sedikit lebih mahal di akhir periode. Tetapi jawaban Q3 justru muncul dari baris terakhir keluaran: ayam broiler naik pada 6 dari 7 perubahan pekan. Hanya M3 yang turun tipis (33.5 → 33.2); sisanya menanjak terus, 33.0 → 35.2. Inilah pola “menanjak perlahan tetapi konsisten” yang dicari — tren naik sebesar +6.67% dalam delapan pekan, atau kira-kira 3% per empat pekan. Berbeda dengan cabai yang menggulung bukit lalu pulih, ayam benar-benar bergeser tingkat.

Musim Hujan dan Lonjakan M4-M5 #

Angka-angka sudah menunjuk; sekarang konteksnya. M4 adalah pekan mulai 26 Januari 2026 dan M5 pekan mulai 2 Februari 2026 — ujung puncak musim hujan di Jawa yang biasanya berlangsung sekitar November sampai Maret. Hujan lebat mengganggu dua hal sekaligus: panen dan pengangkutan. Cabai yang tidak dipanen tepat waktu membusuk di ladang, jalan distribusi tersendat, pasokan ke pasar menipis — dan harga yang kita catat melonjak 42.0 → 65.0 → 78.0.

Bentuk pemulihannya pun masuk akal: begitu curah hujan mereda dan pasokan kembali normal pada M6–M8, harga turun bertahap 55.0 → 44.0 → 40.0, kembali nyaris ke titik awal. Inilah tanda gejolak musiman: naik karena pasokan terganggu, pulih ketika gangguannya usai — berbeda dari tren struktural seperti ayam yang naik karena biaya produksinya sendiri yang bergeser.

Jujur soal Delapan Pekan #

Semua kesimpulan tren dan musiman di atas berdiri di atas satu kenyataan: periode kita hanya delapan pekan, dari Januari sampai Februari. Dengan jendela sependek itu, kita tidak bisa memisahkan tiga kemungkinan yang berbeda: apakah kenaikan umum di akhir periode adalah tren harga yang sesungguhnya, sisa efek musim hujan, atau sekadar naik-turun biasa. Kita juga tidak melihat musim lain — panen raya, hari besar, bulan puasa — yang mungkin punya pola harganya sendiri.

Untuk itulah laporan akhir (Bagian 10) mencantumkan keterbatasan ini secara eksplisit, dan rekomendasi warung dirumuskan untuk jangka pendek, bukan ramalan tahunan. Cara kerja formal memisahkan tren, musiman, dan sisa variasi pada data yang lebih panjang dibahas pada chapter Pengenalan Deret Waktu .

Ringkasan Bagian 7 #

Dua pembandingan sederhana menunjukkan seluruh komoditas menutup periode lebih mahal, dengan ayam broiler sebagai satu-satunya tren naik yang konsisten (6 dari 7 perubahan naik, +6.67%). Lonjakan cabai M4–M5 bertepatan dengan puncak musim hujan dan pulih setelahnya — gejolak musiman, bukan pergeseran tingkat harga. Batas delapan pekan kita pegang terbuka: cukup untuk mendeskripsikan, belum cukup untuk menyimpulkan pola tahunan.

Gejolak dan tren tiap komoditas kini terukur; pertanyaan berikutnya mempertemukan semuanya dalam satu arena: komoditas mana yang paling berisiko bagi warung, dan apa artinya bagi belanja mingguan? Kita adu pada Bagian 8: Membandingkan Komoditas .