1. Deskripsi Insight

Insight: Apakah terdapat kategori film tertentu yang mendominasi total pendapatan rental di Sakila DVD Store?

Analisis ini bertujuan untuk mengetahui kategori film mana yang paling menguntungkan (menghasilkan revenue tertinggi) dan melihat hubungannya dengan frekuensi penyewaan. Informasi ini sangat berguna bagi manajemen untuk menentukan strategi pengadaan inventaris film ke depannya. Fokus pada kategori dengan peminat tinggi dapat mengoptimalkan keuntungan.

2. Persamaan Matematis (LaTeX)

Dalam analisis ini, kita menghitung total pendapatan untuk setiap kategori. Misalkan \(R_c\) adalah total pendapatan untuk kategori \(c\), dan \(p_{c,i}\) adalah nominal pembayaran (payment) untuk transaksi penyewaan ke-\(i\) pada kategori tersebut. Total penyewaan pada kategori \(c\) adalah \(N_c\).

Maka, persamaan matematis untuk total pendapatan kategori \(c\) adalah:

\[ R_c = \sum_{i=1}^{N_c} p_{c,i} \]

Rata-rata pendapatan per transaksi penyewaan (\(\bar{R}_c\)) pada kategori tersebut dapat dirumuskan sebagai:

\[ \bar{R}_c = \frac{R_c}{N_c} \]

3. Persiapan dan Pengambilan Data

Kode di bawah ini menggunakan bahasa R untuk mengambil data dari database MySQL Sakila. Jika koneksi database gagal, skrip akan secara otomatis menggunakan fallback data hasil eksekusi query Sakila untuk memastikan laporan tetap dapat di-render dengan lancar.

library(DBI)
library(RMySQL)
library(ggplot2)
library(dplyr)
library(knitr)
library(scales)

db_connected <- FALSE

tryCatch({
  con <- dbConnect(RMySQL::MySQL(), 
                   dbname = "sakila", 
                   host = "localhost", 
                   user = "root", 
                   password = "password_anda")
  
  query <- "
    SELECT c.name AS category, 
           COUNT(r.rental_id) AS total_rentals,
           SUM(p.amount) AS total_revenue
    FROM category c
    JOIN film_category fc ON c.category_id = fc.category_id
    JOIN inventory i ON fc.film_id = i.film_id
    JOIN rental r ON i.inventory_id = r.inventory_id
    JOIN payment p ON r.rental_id = p.rental_id
    GROUP BY c.name
    ORDER BY total_revenue DESC;
  "
  
  revenue_data <- dbGetQuery(con, query)
  dbDisconnect(con)
  db_connected <- TRUE
  print("Koneksi database berhasil!")
  
}, error = function(e) {
  message("Info: Menggunakan data fallback. Konfigurasi DB diperlukan untuk live data MySQL.")
})

if (!db_connected) {
  revenue_data <- data.frame(
    category = c("Sports", "Sci-Fi", "Animation", "Drama", "Comedy", "Action", "New", "Games", "Foreign", "Family", "Documentary", "Horror", "Children", "Classics", "Travel", "Music"),
    total_rentals = c(1179, 1101, 1166, 1060, 941, 1112, 940, 969, 1033, 1096, 1050, 846, 945, 939, 837, 830),
    total_revenue = c(5314.21, 4756.98, 4656.30, 4587.39, 4383.58, 4375.85, 4351.62, 4281.33, 4270.67, 4226.07, 4207.50, 3722.54, 3655.55, 3628.61, 3549.64, 3417.72)
  )
}

revenue_data <- revenue_data %>%
  mutate(avg_revenue_per_rental = total_revenue / total_rentals)

kable(head(revenue_data, 5), caption = "Top 5 Kategori Film Berdasarkan Pendapatan", 
      format.args = list(big.mark = ",", decimal.mark = ".", nsmall = 2))
Top 5 Kategori Film Berdasarkan Pendapatan
category total_rentals total_revenue avg_revenue_per_rental
Sports 1,179.00 5,314.21 4.507388
Sci-Fi 1,101.00 4,756.98 4.320600
Animation 1,166.00 4,656.30 3.993396
Drama 1,060.00 4,587.39 4.327726
Comedy 941.00 4,383.58 4.658427

4. Visualisasi Data

Berikut adalah visualisasi diagram batang yang membandingkan total pendapatan untuk setiap kategori film.

ggplot(revenue_data, aes(x = reorder(category, total_revenue), y = total_revenue, fill = total_revenue)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  scale_fill_gradient(low = "#85c1e9", high = "#21618c", name = "Pendapatan ($)") +
  scale_y_continuous(labels = dollar_format(prefix = "$")) +
  labs(
    title = "Total Pendapatan Rental per Kategori Film",
    subtitle = "Data dari Sakila DVD Rental Database",
    x = "Kategori Film",
    y = "Total Pendapatan (USD)"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 16),
    axis.title = element_text(face = "bold"),
    axis.text = element_text(size = 11)
  )

5. Analisis dan Interpretasi

Berdasarkan hasil visualisasi dan analisis data di atas, dapat ditarik beberapa interpretasi penting:

  1. Kategori Paling Menguntungkan: Kategori film Sports merupakan penyumbang pendapatan terbesar bagi Sakila DVD Rental, dengan total pendapatan mencapai $5,314.21 dari 1,179 kali penyewaan.
  2. Dominasi Kategori Populer: Setelah Sports, kategori Sci-Fi dan Animation menyusul di peringkat kedua dan ketiga. Hal ini menunjukkan bahwa pelanggan Sakila memiliki preferensi yang kuat terhadap genre hiburan yang memiliki nilai produksi tinggi (seperti Sci-Fi dan Animasi) serta Olahraga.
  3. Rekomendasi Bisnis: Untuk meningkatkan profitabilitas, pihak manajemen toko dapat mempertimbangkan untuk:
    • Menambah koleksi DVD/Blu-ray pada kategori Sports, Sci-Fi, dan Animation.
    • Memberikan promosi (seperti bundle rental) pada kategori-kategori yang berada di urutan bawah (seperti Music dan Travel) untuk mendongkrak tingkat penyewaan pada kategori tersebut.
    • Menempatkan film-film dari kategori teratas di area display utama toko agar mudah dijangkau oleh pelanggan.