Pendahuluan

Dataset yang digunakan dalam analisis ini berasal dari sistem bike sharing di Washington, D.C., yang tersedia melalui UCI Machine Learning Repository. Dataset ini mencatat aktivitas penyewaan sepeda harian selama periode dua tahun, termasuk informasi terkait kondisi lingkungan seperti suhu, kelembaban, dan kecepatan angin, serta informasi penggunaan seperti jumlah penyewaan sepeda per hari.

Sistem bike sharing merupakan salah satu bentuk transportasi modern yang sangat dipengaruhi oleh kondisi lingkungan dan pola aktivitas manusia. Faktor-faktor seperti cuaca, musim, dan kondisi atmosfer dapat memengaruhi keputusan seseorang untuk menggunakan sepeda. Oleh karena itu, memahami pola distribusi dan hubungan antar variabel dalam dataset ini menjadi penting untuk memperoleh wawasan mengenai perilaku penggunaan sepeda.

Eksplorasi Awal Data

Tahap awal analisis diawali dengan memuat dataset Bike Sharing dari UCI Machine Learning Repository dan melakukan pemeriksaan struktur data. Tujuan dari tahap ini adalah untuk memastikan dataset siap diproses dengan melihat nama-nama kolom colnames serta menampilkan beberapa baris pertama head untuk memahami isi data. Selain itu, kita menampilkan tabel interaktif menggunakan datatable agar pengguna dapat mengeksplorasi data secara langsung, termasuk melihat distribusi nilai, mencari pola awal, dan mengidentifikasi kemungkinan adanya data yang perlu dibersihkan sebelum analisis lebih lanjut.

bike_data <- read.csv("D:/TUGAS KULIAH/SEM 4/VISDAT/day.csv")
#colnames(bike_data)
#head(bike_data)
datatable(bike_data, options = list(pageLength = 5, autoWidth = TRUE))

Persiapan dan Transformasi Data

Setelah memahami struktur data, tahap selanjutnya adalah melakukan preprocessing untuk mengubah variabel mentah menjadi bentuk yang lebih informatif dan mudah diinterpretasi. Langkah ini mencakup konversi tipe data misalnya dteday menjadi format Date, serta transformasi variabel kategorikal seperti musim season, kondisi cuaca weathersit, dan tipe hari workingday menjadi label yang deskriptif dalam Bahasa Indonesia.

Selain itu, variabel numerik seperti suhu temp dan kelembaban hum dikonversi ke satuan aslinya derajat Celcius dan persen agar lebih mudah dipahami dalam konteks dunia nyata. Transformasi ini penting karena nilai originalnya ternormalisasi, sehingga kurang intuitif jika langsung digunakan dalam visualisasi.

Visualisasi

Tujuan utama dari visualisasi ini adalah untuk mengeksplorasi dan membandingkan tren temporal dari dua tipe pengguna sepeda, yaitu pengguna kasual atau sementara dan pengguna terdaftar atau member, sepanjang periode 2011 hingga 2012. Visualisasi ini diwujudkan dalam bentuk line chart interaktif yang dikembangkan dengan pustaka plotly, sehingga pengguna dapat mengamati fluktuasi harian jumlah penyewaan dari kedua tipe pengguna secara langsung. Melalui visualisasi ini, berbagai pola musiman dapat diidentifikasi, misalnya peningkatan penggunaan yang signifikan selama musim panas. Lebih jauh lagi, pengguna dapat membandingkan perilaku yang berbeda antara pengguna kasual yang cenderung bersifat rekreasi dengan pengguna terdaftar yang lebih berperan sebagai komuter harian. Keunggulan interaktivitas plotly juga memungkinkan eksplorasi faktor-faktor yang memengaruhi penyewaan melalui fitur hover, yang menampilkan informasi tambahan seperti suhu, kelembaban, kondisi cuaca, dan tipe hari secara real-time.

Visualisasi ini dipilih karena kemampuannya dalam menjawab pertanyaan mendasar mengenai bagaimana pola penggunaan berbeda antara pengguna kasual dan terdaftar serta faktor apa saja yang memengaruhinya. Dengan pemahaman yang diperoleh dari visualisasi ini, kita dapat mengidentifikasi segmen pengguna mana yang berpotensi untuk ditingkatkan partisipasinya, menentukan waktu yang paling tepat untuk menjalankan program promosi, serta memahami bagaimana faktor eksternal seperti kondisi cuaca dapat memengaruhi kelancaran operasional sistem berbagi sepeda secara keseluruhan.

# Transformasi data untuk perbandingan kasual vs terdaftar
bike_long <- bike_clean %>%
  pivot_longer(
    cols = c(casual, registered),
    names_to = "tipe_pengguna",
    values_to = "jumlah_penyewaan"
  ) %>%
  mutate(
    tipe_pengguna = factor(tipe_pengguna, 
                           levels = c("casual", "registered"),
                           labels = c("Pengguna Kasual (Sementara)", 
                                     "Pengguna Terdaftar (Member)"))
  )

# Membuat line chart interaktif dengan plotly
fig <- plot_ly(
  data = bike_long,
  x = ~dteday,
  y = ~jumlah_penyewaan,
  color = ~tipe_pengguna,
  colors = c("#FF8C42", "#3A6EA5"),  # Oranye untuk kasual, Biru untuk terdaftar
  type = 'scatter',
  mode = 'lines',
  line = list(width = 1.5),
  hoverinfo = 'text',
  text = ~paste(
    '<b>Tanggal:</b>', format(dteday, "%d %B %Y"),
    '<br><b>', tipe_pengguna, ':</b>', format(jumlah_penyewaan, big.mark = ","),
    '<br><b>Musim:</b>', musim,
    '<br><b>Cuaca:</b>', kondisi_cuaca,
    '<br><b>Suhu:</b>', round(suhu_celsius, 1), '°C',
    '<br><b>Kelembaban:</b>', round(kelembaban_persen), '%',
    '<br><b>Tipe Hari:</b>', tipe_hari
  )
) %>%
  layout(
    title = list(
      text = "<b>Perbandingan Tren Pengguna Kasual vs Terdaftar</b><br>
              <sub>Sistem Bike Sharing Washington D.C. (2011-2012)</sub>",
      font = list(size = 18)
    ),
    xaxis = list(
      title = "<b>Periode Waktu</b>",
      titlefont = list(size = 14),
      tickfont = list(size = 11),
      gridcolor = "#E5E5E5"
    ),
    yaxis = list(
      title = "<b>Jumlah Penyewaan (per hari)</b>",
      titlefont = list(size = 14),
      tickfont = list(size = 11),
      gridcolor = "#E5E5E5",
      zeroline = TRUE,
      zerolinecolor = "#CCCCCC"
    ),
    hoverlabel = list(
      bgcolor = "white",
      font = list(size = 12, color = "#333333"),
      bordercolor = "#2C3E50",
      borderwidth = 2
    ),
    legend = list(
      title = list(text = "<b>Tipe Pengguna</b>"),
      orientation = "h",
      x = 0.5,
      xanchor = "center",
      y = 1.05,
      bgcolor = "rgba(255,255,255,0.8)",
      bordercolor = "#CCCCCC",
      borderwidth = 1
    ),
    margin = list(t = 100, b = 50, l = 70, r = 40),
    paper_bgcolor = "#FAFAFA",
    plot_bgcolor = "#FFFFFF"
  ) %>%
  # Menambahkan range slider untuk navigasi time series
  rangeslider(
    start = min(bike_clean$dteday),
    end = max(bike_clean$dteday)
  ) %>%
  # Menambahkan tombol untuk mengatur view
  config(
    displayModeBar = TRUE,
    modeBarButtonsToAdd = list(
      "drawline",
      "drawrect"
    ),
    toImageButtonOptions = list(
      format = "png",
      filename = "bike_sharing_tren",
      width = 1200,
      height = 600
    )
  )

fig

Interpretasi dan Insight

Visualisasi ini membandingkan tren temporal antara pengguna kasual yang berwarna oranye dan pengguna terdaftar yang berwarna biru sepanjang periode 2011 hingga 2012. Garis biru yang mewakili pengguna terdaftar menunjukkan pola yang stabil dengan tren meningkat dari tahun ke tahun, yang mencerminkan perilaku komuter harian dan loyalitas member terhadap layanan ini. Sebaliknya, garis oranye untuk pengguna kasual memperlihatkan fluktuasi yang tajam dengan lonjakan penggunaan yang signifikan terjadi selama musim panas di pertengahan tahun, serta peningkatan pada akhir pekan yang mengindikasikan karakteristik pengguna rekreasi atau wisatawan. Celah yang terlihat antara kedua garis tersebut merepresentasikan potensi pasar yang besar untuk mengonversi pengguna kasual menjadi member terdaftar melalui strategi promosi yang tepat. Selain itu, puncak penggunaan tertinggi untuk pengguna terdaftar tercatat pada Oktober 2012, sementara pengguna kasual mencapai titik tertingginya selama musim panas 2012. Dengan memanfaatkan fitur hover, dapat diamati bahwa faktor cuaca seperti suhu hangat dan kondisi cerah berkorelasi positif dengan peningkatan jumlah penyewaan, terutama pada segmen pengguna kasual.

Analisis Prediksi Sederhana

Setelah membandingkan perilaku pengguna kasual dan terdaftar, kita dapat melangkah lebih jauh dengan melakukan analisis prediksi sederhana untuk memahami arah tren dan memperkirakan nilai di periode mendatang. Berbeda dengan peramalan jangka panjang yang kompleks, analisis ini bertujuan untuk menghaluskan fluktuasi harian agar pola yang lebih bermakna dapat terlihat, serta memperkirakan bagaimana kecenderungan penggunaan sepeda pada bulan-bulan terakhir tahun 2012 berdasarkan data yang telah tersedia. Pendekatan ini membantu kita menjawab pertanyaan seperti “Apakah penggunaan sepeda menunjukkan tren meningkat?” dan “Bagaimana perkiraan penggunaan di akhir tahun jika pola yang sama berlanjut?”

Dengan menggunakan metode rata-rata bergerak atau moving average, fluktuasi harian yang tajam dapat diperhalus sehingga pola yang lebih mendasar menjadi terlihat. Garis oranye yang mewakili tren 7 hari menunjukkan siklus mingguan, di mana penggunaan cenderung meningkat pada akhir pekan dan menurun pada awal pekan. Sementara itu, garis biru yang mewakili tren 30 hari memperlihatkan pola musiman yang lebih jelas, dengan puncak penggunaan yang konsisten terjadi pada pertengahan tahun atau musim panas, serta lembah yang dalam pada awal dan akhir tahun atau musim dingin.

# Agregasi data bulanan untuk prediksi
monthly_df <- bike_clean %>%
  group_by(tahun = year(dteday), bulan = month(dteday)) %>%
  summarise(
    total_penyewaan = sum(cnt),
    rata_casual = mean(casual),
    rata_registered = mean(registered),
    .groups = 'drop'
  ) %>%
  mutate(
    periode = paste(month.abb[bulan], tahun),
    urutan = 1:n()
  )

# Buat time series object
ts_bulanan <- ts(monthly_df$total_penyewaan, 
                 start = c(2011, 1), 
                 frequency = 12)

# Model Holt-Winters untuk data dengan pola musiman
hw_model <- HoltWinters(ts_bulanan)
prediksi_3bln <- forecast(hw_model, h = 3)

# Konversi hasil prediksi ke data frame untuk plotting
pred_df <- data.frame(
  periode = c("Sep 2012", "Okt 2012", "Nov 2012"),
  prediksi = as.numeric(prediksi_3bln$mean),
  lower80 = prediksi_3bln$lower[,1],
  upper80 = prediksi_3bln$upper[,1],
  lower95 = prediksi_3bln$lower[,2],
  upper95 = prediksi_3bln$upper[,2]
)

# Plot prediksi
pred_plot <- plot_ly() %>%
  # Data aktual
  add_lines(x = monthly_df$periode, y = monthly_df$total_penyewaan,
            name = "Data Aktual",
            line = list(color = "#2E86AB", width = 3),
            marker = list(size = 6)) %>%
  # Prediksi
  add_lines(x = pred_df$periode, y = pred_df$prediksi,
            name = "Prediksi",
            line = list(color = "#A23B72", width = 3, dash = "dash"),
            marker = list(size = 6)) %>%
  # Interval kepercayaan 80%
  add_ribbons(x = pred_df$periode,
              ymin = pred_df$lower80, ymax = pred_df$upper80,
              name = "Interval 80%",
              fillcolor = "rgba(162, 59, 114, 0.2)",
              line = list(width = 0)) %>%
  # Interval kepercayaan 95%
  add_ribbons(x = pred_df$periode,
              ymin = pred_df$lower95, ymax = pred_df$upper95,
              name = "Interval 95%",
              fillcolor = "rgba(162, 59, 114, 0.1)",
              line = list(width = 0)) %>%
  layout(
    title = list(
      text = "<b>Prediksi Penggunaan Sepeda (3 Bulan Terakhir 2012)</b><br>
              <sub>Berdasarkan Pola Musiman 2011-2012 dengan Metode Holt-Winters</sub>",
      font = list(size = 16)
    ),
    xaxis = list(
      title = "<b>Periode (Bulan-Tahun)</b>",
      tickangle = -45
    ),
    yaxis = list(
      title = "<b>Total Penyewaan Bulanan</b>"
    ),
    hovermode = "x",
    legend = list(
      orientation = "h",
      x = 0.5,
      xanchor = "center",
      y = 1.1
    ),
    margin = list(b = 100, t = 100)
  )

pred_plot

Berdasarkan model prediksi sederhana dengan metode Holt-Winters yang memperhitungkan komponen musiman, diperkirakan bahwa total penyewaan sepeda pada tiga bulan terakhir tahun 2012, yaitu September, Oktober, dan November, akan berada dalam rentang tertentu. Garis putus-putus berwarna ungu menunjukkan nilai prediksi, sementara area transparan di sekitarnya merepresentasikan interval kepercayaan 80 persen dan 95 persen, yang menggambarkan tingkat ketidakpastian dari prediksi tersebut. Hasil ini memperkuat temuan sebelumnya bahwa penggunaan sepeda cenderung menuju puncaknya pada pertengahan tahun dan mulai menurun menjelang akhir tahun, seiring dengan datangnya musim dingin.

Kesimpulan

Berdasarkan analisis time series terhadap dataset bike sharing periode 2011–2012, diperoleh beberapa temuan utama yang berkaitan dengan tujuan eksplorasi yang telah ditetapkan sebelumnya.

Pertama, visualisasi perbandingan tren antara pengguna kasual dan pengguna terdaftar menunjukkan perbedaan pola perilaku yang cukup jelas. Pengguna terdaftar yang direpresentasikan dengan garis biru memperlihatkan pola yang relatif stabil dengan kecenderungan meningkat dari tahun ke tahun. Pola ini mengindikasikan bahwa kelompok tersebut cenderung menggunakan layanan sepeda sebagai bagian dari aktivitas komuter harian. Sebaliknya, pengguna kasual yang digambarkan dengan garis oranye memperlihatkan fluktuasi yang lebih tajam, dengan peningkatan signifikan terutama pada musim panas dan akhir pekan, sehingga mencerminkan karakteristik penggunaan yang lebih bersifat rekreasional.

Kedua, pemanfaatan fitur interaktif pada plotly membantu dalam mengidentifikasi beberapa faktor yang berhubungan dengan tingkat penyewaan sepeda. Kondisi suhu yang lebih hangat serta cuaca yang cerah tampak memiliki hubungan positif dengan peningkatan jumlah penyewaan, khususnya pada kelompok pengguna kasual. Temuan ini memberikan gambaran bahwa faktor lingkungan atau kondisi cuaca turut memengaruhi keputusan masyarakat dalam menggunakan layanan sepeda.

Ketiga, penerapan metode moving average memungkinkan proses perataan terhadap fluktuasi harian sehingga pola musiman yang lebih mendasar dapat diamati dengan lebih jelas. Tren rata-rata bergerak selama 30 hari menunjukkan bahwa puncak penggunaan sepeda umumnya terjadi pada pertengahan tahun yang bertepatan dengan musim panas, sedangkan tingkat penggunaan terendah muncul pada awal serta akhir tahun yang identik dengan musim dingin. Pola tersebut selaras dengan karakteristik iklim di wilayah Washington D.C. yang memiliki empat musim.

Keempat, hasil prediksi sederhana menggunakan metode Holt-Winters mengindikasikan bahwa jumlah penggunaan sepeda pada tiga bulan terakhir tahun 2012 diperkirakan mengalami penurunan dibandingkan periode puncak pada musim panas. Prediksi tersebut juga disertai dengan interval kepercayaan yang memberikan gambaran rentang kemungkinan nilai di masa mendatang. Hasil ini semakin menegaskan bahwa faktor musim memiliki pengaruh yang cukup dominan terhadap dinamika penggunaan sepeda.

Secara keseluruhan, analisis yang dilakukan telah mampu memenuhi tujuan utama penelitian, yaitu mengeksplorasi serta membandingkan tren temporal antara dua tipe pengguna sekaligus mengidentifikasi faktor-faktor yang berkaitan dengan perubahan tingkat penyewaan sepeda. Perbedaan pola yang terlihat antara pengguna kasual dan pengguna terdaftar juga menunjukkan adanya potensi strategi pengembangan layanan, misalnya melalui upaya konversi pengguna kasual menjadi anggota terdaftar dengan memanfaatkan periode ketika aktivitas pengguna kasual meningkat, seperti pada musim panas.