Materi 8 ‐ Time Series - ThesionMS/Exploratory-Data-Analysis GitHub Wiki

Analisis Trend Data Deret Waktu

____________

Analisis tren data deret waktu melibatkan pengamatan, pemahaman, dan interpretasi perubahan arah atau pola yang terjadi dalam data sepanjang waktu. Tujuannya adalah untuk mengidentifikasi perubahan-perubahan signifikan, tren positif atau negatif, dan pola-pola yang mungkin ada dalam data deret waktu. Analisis tren merupakan langkah awal dalam memahami perilaku jangka panjang dari suatu fenomena yang direkam dalam data deret waktu.

Contoh analisis tren data deret waktu bisa mencakup mengidentifikasi peningkatan atau penurunan dalam penjualan bulanan, mengamati perubahan suhu rata-rata tahunan, atau menganalisis tren pertumbuhan ekonomi dari waktu ke waktu. Analisis tren memberikan wawasan yang berharga untuk perencanaan strategis, pengambilan keputusan, dan prediksi masa depan.

Karakteristik Data Deret Waktu

Data deret waktu adalah data yang dikumpulkan secara berkala dari waktu ke waktu. Data ini dapat berupa data kuantitatif, seperti harga saham, volume penjualan, atau tingkat inflasi. Data deret waktu juga dapat berupa data kualitatif, seperti opini publik atau kepuasan pelanggan. Data deret waktu memiliki beberapa karakteristik khusus yang membedakannya dari jenis data lainnya. Berikut adalah beberapa karakteristik utama:

  1. Tergantung pada Waktu (Time-Dependent): Data deret waktu memiliki ketergantungan pada faktor waktu, di mana nilai-nilai observasi terjadi dalam urutan waktu tertentu.

    Contoh: Data penjualan harian sebuah toko. Setiap entri data mencatat jumlah penjualan pada suatu hari tertentu.

  2. Tren (Trend): Tren mencerminkan perubahan umum atau arah dalam data sepanjang waktu. Tren dapat naik, turun, atau tetap datar.

    Contoh: Jika data penjualan toko menunjukkan peningkatan yang konsisten seiring berjalannya waktu, itu merupakan tren positif.

  3. Musiman (Seasonality): Pola musiman adalah fluktuasi reguler atau siklus yang terjadi pada interval waktu tertentu, seperti harian, bulanan, atau tahunan.

    Contoh: Penjualan barang elektronik yang meningkat menjelang liburan Natal setiap tahunnya.

  4. Siklus (Cycle): Siklus adalah fluktuasi yang terjadi pada interval waktu yang lebih panjang dan tidak selalu terkait dengan pola musiman tahunan.

    Contoh: Siklus ekonomi yang mengalami periode ekspansi dan kontraksi selama beberapa tahun.

  5. Noise (Irregularity): Noise atau kekacauan adalah variasi acak yang tidak dapat dijelaskan oleh tren, musim, atau siklus. Ini mencerminkan ketidakpastian atau faktor-faktor acak dalam data.

    Contoh: Fluktuasi harian dalam penjualan toko yang tidak dapat diatribusikan kepada musim atau tren tertentu.

  6. Stasioneritas (Stationarity): Data deret waktu yang stasioner memiliki statistik dasar seperti rata-rata dan varians yang konstan sepanjang waktu. Stasioneritas mempermudah analisis dan pemodelan.

    Contoh: Jika rata-rata dan varians penjualan harian toko tidak berubah secara signifikan sepanjang tahun, data dianggap stasioner.

Fungsi Korelasi dan Autokorelasi:

  • Fungsi Korelasi: Mengukur seberapa erat dua variabel terkait satu sama lain.
  • Autokorelasi: Mengukur seberapa erat suatu variabel terkait dengan dirinya sendiri dalam interval waktu tertentu.

Dasar Analisis Data Deret Waktu

Analisis data deret waktu adalah proses mengeksplorasi dan memahami data deret waktu. Tujuan analisis data deret waktu adalah untuk mengidentifikasi pola, tren, dan hubungan dalam data. Terdapat beberapa metode dasar analisis data deret waktu, yaitu Visualisasi data, Analisis statistik, dan Modeling data.

Metode Dasar Analisis Deret Waktu:
  1. Dekomposisi Deret Waktu: Membongkar deret waktu menjadi komponen-komponen utama seperti tren, musiman, siklus, dan noise.

    • Metode: Metode dekomposisi berbeda, termasuk dekomposisi additif dan multiplikatif.
  2. Metode Rata-Rata Bergerak: Merata-ratakan nilai-nilai sebelumnya untuk mengidentifikasi tren atau pola.

    • Metode: Rata-rata bergerak sederhana atau rata-rata bergerak tertimbang.
  3. Uji Hipotesis: Menentukan apakah suatu pola atau tren yang diamati signifikan secara statistik.

    • Metode: Uji t dan uji F, tergantung pada konteksnya.
  4. Pemodelan Regresi pada Deret Waktu: Memprediksi variabel tergantung berdasarkan variabel independen dan waktu.

    • Metode: Pemodelan regresi khusus untuk deret waktu.
  5. Pengujian Stasioneritas dan Korelasi: Mengkonfirmasi stasioneritas dan mengukur korelasi antara variabel.

    • Metode: Augmented Dickey-Fuller Test untuk stasioneritas dan uji korelasi untuk mengukur hubungan antara dua variabel.
  6. Model ARIMA (AutoRegressive Integrated Moving Average): Memprediksi nilai-nilai masa depan berdasarkan pola historis.

    • Metode: Kombinasi dari komponen autoregresif, komponen moving average, dan diferensiasi.
  7. Analisis Spektral: Menganalisis frekuensi dan amplitudo dalam deret waktu.

    • Metode: Transformasi Fourier dan analisis spektral lainnya.

Analisis Tren dengan Grafik Visualisasi

Tren adalah perubahan yang terjadi dalam data deret waktu dari waktu ke waktu. Tren dapat diidentifikasi dengan menggunakan grafik visualisasi.

Grafik yang digunakan untuk menganalisis tren data deret waktu adalah:

  1. Grafik Garis (Line Chart): Menunjukkan perubahan nilai variabel terhadap waktu.
  2. Grafik Scatter (Scatter Plot): Menunjukkan hubungan antara dua variabel, mungkin terkait dengan waktu.
  3. Grafik Moving Average: Memperlihatkan tren atau pola dengan merata-ratakan nilai-nilai sebelumnya.
  4. Grafik Decomposition: Menunjukkan komponen-komponen seperti tren, musiman, siklus, dan noise.
  5. Autocorrelation Plot: Menunjukkan tingkat korelasi antara nilai-nilai pada waktu tertentu dengan nilai-nilai pada waktu sebelumnya.
  6. Grafik Boxplot: Menunjukkan distribusi dan kecenderungan data secara visual.

Pilihan grafik tergantung pada konteks dan tujuan analisis yang diinginkan.

Teknik Visualisasi dan Eksplorasi Data Deret Waktu

Pembersihan Data pada Data Deret Waktu

Pembersihan data adalah proses menghilangkan kesalahan dan anomali dari data. Pembersihan data penting dilakukan untuk memastikan bahwa data akurat dan dapat digunakan untuk analisis. Terdapat beberapa teknik pembersihan data yang dapat digunakan untuk data deret waktu, yaitu: Menghapus data yang hilang, Menghilangkan data outlier, Mengganti data yang tidak akurat.

Visualisasi Data Deret Waktu

Visualisasi data adalah cara yang efektif untuk memahami data deret waktu. Grafik dan diagram dapat membantu untuk mengidentifikasi pola dan tren dalam data.

Terdapat beberapa jenis grafik dan diagram yang dapat digunakan untuk memvisualisasikan data deret waktu, yaitu:

  1. Grafik Garis (Line Chart):
import matplotlib.pyplot as plt
import pandas as pd

# Contoh data
data = {
    'Tanggal': pd.date_range(start='2022-01-01', end='2022-01-21', freq='D'),
    'Nilai': [50, 55, 60, 45, 70, 65, 80, 75, 90, 85, 100, 95, 110, 105, 120, 115, 130, 125, 140, 135, 150]
}

plt.plot(data['Tanggal'], data['Nilai'])
plt.xlabel('Tanggal')
plt.ylabel('Nilai')
plt.title('Grafik Garis Data Deret Waktu')
plt.show()
  1. Grafik Scatter (Scatter Plot):
plt.scatter(data['Tanggal'], data['Nilai'])
plt.xlabel('Tanggal')
plt.ylabel('Nilai')
plt.title('Grafik Scatter Data Deret Waktu')
plt.show()
  1. Grafik Moving Average:
data['Moving_Avg'] = pd.Series(data['Nilai']).rolling(window=3).mean()
plt.plot(data['Tanggal'], data['Moving_Avg'], label='Moving Average')
plt.xlabel('Tanggal')
plt.ylabel('Nilai')
plt.title('Grafik Moving Average Data Deret Waktu')
plt.legend()
plt.show()
  1. Grafik Decomposition:
from statsmodels.tsa.seasonal import seasonal_decompose

result = seasonal_decompose(data['Nilai'], model='additive', period=4)
result.plot()
plt.show()
  1. Autocorrelation Plot:
from pandas.plotting import autocorrelation_plot

autocorrelation_plot(data['Nilai'])
plt.show()
  1. Grafik Boxplot:
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt

# Contoh data
data = {
    'Tanggal': pd.date_range(start='2022-01-01', end='2022-01-07', freq='D'),
    'Nilai': [50, 55, 60, 45, 70, 65, 80],
}
data['Tanggal'] = pd.to_datetime(data['Tanggal'])
data['Hari'] = data['Tanggal'].dayofweek

sns.boxplot(x=data['Hari'], y=data['Nilai'])

sns.boxplot(x=data['Hari'], y=data['Nilai'])
plt.xlabel('Hari dalam Seminggu')
plt.ylabel('Nilai')
plt.title('Boxplot Data Deret Waktu per Hari dalam Seminggu')
plt.show()

Pengelompokkan pada Data Deret Waktu

Teknik pengelompokkan pada data deret waktu melibatkan pembagian data ke dalam kelompok-kelompok tertentu berdasarkan suatu kriteria atau aturan tertentu. Hal ini dapat membantu mengidentifikasi pola, tren, atau variabilitas yang mungkin tidak terlihat ketika data dipertimbangkan secara keseluruhan. Tujuannya adalah;

  1. Identifikasi Pola Musiman: Dengan mengelompokkan data berdasarkan periode waktu tertentu, kita dapat mengidentifikasi pola musiman atau fluktuasi yang mungkin terulang pada interval tersebut.
  2. Analisis Perbedaan Antara Kelompok: Membandingkan statistik atau perilaku deret waktu di antara kelompok-kelompok dapat memberikan wawasan tentang perbedaan atau kesamaan yang signifikan.
  3. Pemahaman Variabilitas: Mengelompokkan data dapat membantu memahami variabilitas dalam deret waktu dan membuka peluang untuk analisis lebih lanjut.
  4. Visualisasi yang Lebih Jelas: Pembagian data ke dalam kelompok-kelompok tertentu dapat menyederhanakan visualisasi dan memungkinkan identifikasi tren atau pola dengan lebih mudah.
import pandas as pd
import matplotlib.pyplot as plt

# Membuat contoh data
data = {
    'Tanggal': pd.date_range(start='2020-01-01', end='2023-12-31', freq='M'),
    'Penjualan': [100, 120, 80, 110, 130, 90, 105, 115, 75, 95,
                  85, 120, 110, 130, 100, 115, 120, 80, 90, 105,
                  110, 130, 95, 105, 115, 80, 100, 120, 110, 130,
                  85, 95, 120, 100, 110, 130, 75, 85, 105, 120,
                  90, 100, 110, 130,105, 115, 80, 100]
}

df = pd.DataFrame(data)
df['Kuartal'] = df['Tanggal'].dt.quarter

# Mengelompokkan data berdasarkan kuartal
grouped_data = df.groupby('Kuartal')['Penjualan'].mean()

# Visualisasi
plt.bar(grouped_data.index, grouped_data.values)
plt.xlabel('Kuartal')
plt.ylabel('Rata-rata Penjualan')
plt.title('Rata-rata Penjualan Berdasarkan Kuartal')
plt.show()

Resampling Data Deret Waktu

Teknik resampling pada data deret waktu melibatkan pengubahan frekuensi pengamatan data dari satu interval waktu ke interval waktu lainnya. Hal ini dapat dilakukan dengan cara menambah atau mengurangi jumlah data atau menghitung ulang nilai-nilai statistik seperti rata-rata atau jumlah untuk interval waktu yang berbeda. Resampling dapat dilakukan untuk mengubah frekuensi pengamatan dari yang lebih sering ke yang lebih jarang (downsampling) atau sebaliknya (upsampling). Tujuan dilakukannya resampling;

  1. Adjustment Frekuensi: Resampling memungkinkan penyesuaian frekuensi data untuk keperluan analisis atau visualisasi yang spesifik.
  2. Smooth atau Aggregasi Data: Dengan meresample data, kita dapat menciptakan gambaran yang lebih halus dari tren atau mengagregasi data ke dalam interval waktu yang lebih besar.
  3. Penanganan Data yang Kurang Lengkap: Resampling dapat membantu menangani data yang hilang atau tidak lengkap dengan mengisi atau menghitung ulang nilai untuk interval waktu tertentu.

Opsi Resampling:

  1. Upsampling: Meningkatkan frekuensi pengamatan, contohnya dari bulanan menjadi harian.
  2. Downsampling: Mengurangi frekuensi pengamatan, contohnya dari harian menjadi bulanan.
  3. Penggunaan Fungsi Resampling:
    • Mean: Mengambil rata-rata nilai untuk setiap interval waktu.
    • Sum: Menghitung total nilai untuk setiap interval waktu.
    • Max atau Min: Mengambil nilai maksimum atau minimum untuk setiap interval waktu.
    • Interpolasi: Mengisi atau menghitung ulang nilai antara dua pengamatan yang diberikan.

Contoh Penerapan pada Python:

import pandas as pd
import matplotlib.pyplot as plt

# Membuat contoh data
data = {
    'Tanggal': pd.date_range(start='2020-01-01', end='2023-12-31', freq='M'),
    'Penjualan': [100, 120, 80, 110, 130, 90, 105, 115, 75, 95,
                  85, 120, 110, 130, 100, 115, 120, 80, 90, 105,
                  110, 130, 95, 105, 115, 80, 100, 120, 110, 130,
                  85, 95, 120, 100, 110, 130, 75, 85, 105, 120,
                  90, 100, 110, 130,105, 115, 80, 100]
}

df = pd.DataFrame(data)
# Mengatur kolom 'Tanggal' sebagai indeks
df.set_index('Tanggal', inplace=True)

# Resample menjadi data harian dan menggunakan interpolasi
df_daily = df.resample('D').interpolate()

# Plot hasilnya
plt.figure(figsize=(10, 6))
plt.plot(df.index, df['Penjualan'], marker='o', label='Monthly Data')
plt.plot(df_daily.index, df_daily['Penjualan'], label='Daily Interpolated Data', linestyle='--')
plt.xlabel('Tanggal')
plt.ylabel('Penjualan')
plt.title('Resampling Data Penjualan Menjadi Harian dengan Interpolasi')
plt.legend()
plt.show()

Dalam contoh ini, kita menggunakan fungsi resample untuk meresample data bulanan menjadi harian dan menggunakan metode interpolasi linear untuk mengisi nilai-nilai di antara bulan. Hal ini berguna untuk membuat gambaran yang lebih halus dari tren penjualan.