Simulasi Distribusi Waktu Pelayanan Pelanggan

Simulasi Komputer

NamaAgung Wijaya Putra Zein
Kelas3C

1. Program Python


import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg')

np.random.seed(42)
JUMLAH_PELANGGAN = 100
RATA_RATA_PELAYANAN = 10  # menit

waktu_pelayanan = np.random.exponential(scale=RATA_RATA_PELAYANAN,
                                         size=JUMLAH_PELANGGAN)

rata_rata   = np.mean(waktu_pelayanan)
median      = np.median(waktu_pelayanan)
std_dev     = np.std(waktu_pelayanan)
minimum     = np.min(waktu_pelayanan)
maksimum    = np.max(waktu_pelayanan)
total_waktu = np.sum(waktu_pelayanan)

print("=" * 55)
print("  SIMULASI DISTRIBUSI WAKTU PELAYANAN PELANGGAN")
print("=" * 55)
print(f"  Jumlah pelanggan      : {JUMLAH_PELANGGAN}")
print(f"  Rata-rata (parameter) : {RATA_RATA_PELAYANAN} menit")
print("-" * 55)
print(f"  Rata-rata simulasi    : {rata_rata:.2f} menit")
print(f"  Median                : {median:.2f} menit")
print(f"  Standar deviasi       : {std_dev:.2f} menit")
print(f"  Minimum               : {minimum:.2f} menit")
print(f"  Maksimum              : {maksimum:.2f} menit")
print(f"  Total waktu pelayanan : {total_waktu:.2f} menit")
print("=" * 55)

print("\n  10 Pelanggan Pertama:")
print("  " + "-" * 35)
print(f"  {'No.':<6}{'Waktu Pelayanan (menit)'}")
print("  " + "-" * 35)
for i in range(10):
    print(f"  {i+1:<6}{waktu_pelayanan[i]:.2f}")
print("  " + "-" * 35)

fig, axes = plt.subplots(1, 2, figsize=(14, 5))

ax1 = axes[0]
bins = np.linspace(0, max(waktu_pelayanan) + 5, 20)
ax1.hist(waktu_pelayanan, bins=bins, density=True, alpha=0.7,
         color='#4C72B0', edgecolor='white', label='Hasil Simulasi')

x = np.linspace(0, max(waktu_pelayanan) + 5, 300)
pdf_teoritis = (1 / RATA_RATA_PELAYANAN) * np.exp(-x / RATA_RATA_PELAYANAN)
ax1.plot(x, pdf_teoritis, 'r-', linewidth=2.5, label='PDF Teoritis (Eksponensial)')

ax1.axvline(rata_rata, color='#DD8452', linestyle='--', linewidth=2,
            label=f'Rata-rata = {rata_rata:.2f} menit')
ax1.axvline(median, color='#55A868', linestyle=':', linewidth=2,
            label=f'Median = {median:.2f} menit')

ax1.set_xlabel('Waktu Pelayanan (menit)', fontsize=12)
ax1.set_ylabel('Densitas', fontsize=12)
ax1.set_title('Distribusi Waktu Pelayanan\n(Histogram + PDF Teoritis)', fontsize=13, fontweight='bold')
ax1.legend(fontsize=9, loc='upper right')
ax1.grid(axis='y', alpha=0.3)

ax2 = axes[1]
sorted_waktu = np.sort(waktu_pelayanan)
cdf_empiris = np.arange(1, JUMLAH_PELANGGAN + 1) / JUMLAH_PELANGGAN
ax2.step(sorted_waktu, cdf_empiris, where='post', color='#4C72B0',
         linewidth=2, label='CDF Empiris')

cdf_teoritis = 1 - np.exp(-x / RATA_RATA_PELAYANAN)
ax2.plot(x, cdf_teoritis, 'r-', linewidth=2, label='CDF Teoritis')

ax2.axhline(0.5, color='gray', linestyle=':', alpha=0.5)
ax2.axvline(median, color='#55A868', linestyle=':', linewidth=1.5,
            label=f'Median = {median:.2f} menit')

ax2.set_xlabel('Waktu Pelayanan (menit)', fontsize=12)
ax2.set_ylabel('Probabilitas Kumulatif', fontsize=12)
ax2.set_title('Fungsi Distribusi Kumulatif (CDF)', fontsize=13, fontweight='bold')
ax2.legend(fontsize=9, loc='lower right')
ax2.grid(alpha=0.3)

plt.tight_layout()
plt.savefig('distribusi_waktu_pelayanan.png', dpi=150, bbox_inches='tight')
print(f"\n  Grafik disimpan: distribusi_waktu_pelayanan.png")
print("=" * 55)

2. Grafik Distribusi

Histogram distribusi waktu pelayanan

Gambar 1. Histogram waktu pelayanan 100 pelanggan dengan kurva PDF eksponensial teoritis. Garis oranye = rata-rata, garis hijau = median.

CDF empiris vs teoritis

Gambar 2. CDF empiris (tangga biru) vs CDF teoritis (garis merah).

Box plot waktu pelayanan

Gambar 3. Box plot sebaran waktu pelayanan.

3. Interpretasi Hasil

Kesesuaian dengan Teori

Rata-rata simulasi (9.15 menit) berbeda 0.85 menit dari parameter teoritis (10 menit). Perbedaan ini masuk dalam rentang variasi sampling yang wajar untuk n = 100.

Standar deviasi (9.15 menit) hampir sama dengan rata-rata (9.15 menit), konsisten dengan sifat distribusi eksponensial di mana σ = μ.

CDF empiris pada Gambar 2 berhimpit dengan CDF teoritis, mengkonfirmasi bahwa data simulasi mengikuti distribusi eksponensial.

Bentuk Distribusi

Histogram menunjukkan distribusi menceng kanan (right-skewed): sebagian besar pelanggan dilayani dalam waktu singkat, sementara sebagian kecil membutuhkan waktu jauh lebih lama (hingga 43.34 menit).

Median (6.24 menit) lebih kecil dari rata-rata (9.15 menit). Artinya lebih dari separuh pelanggan selesai dilayani dalam waktu kurang dari 6.24 menit, tetapi pelanggan dengan waktu pelayanan panjang menarik rata-rata ke atas.

Implikasi Praktis

TemuanKonsekuensi
Mayoritas pelanggan selesai kurang dari 7 menit Satu loket memadai untuk kasus umum
Sebagian kecil pelanggan di atas 30 menit Kasus kompleks menghambat antrian, perlu loket terpisah atau eskalasi
Total waktu 915 menit (15.2 jam) untuk 100 pelanggan Satu loket (8 jam/hari) membutuhkan sekitar 1.9 hari kerja
Variabilitas tinggi (σ mendekati μ) Waktu tunggu individual sulit diprediksi