Studi Kasus Finding Outliers pada Data Gaji Karyawan

Studi Kasus Finding Outliers pada Data Gaji Karyawan

Latar Belakang 
Sebuah perusahaan ingin menganalisis distribusi gaji karyawannya untuk :

  • Memastikan tidak ada kesalahan input data.
  • Mengidentifikasi anomali (misal: gaji terlalu tinggi/rendah).
  • Membersihkan data sebelum analisis lebih lanjut.

Dataset
Kita akan menggunakan dataset simulasi gaji karyawan (dalam juta rupiah).

python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# Data gaji karyawan (dalam juta rupiah)
data_gaji = {
    'Nama': ['Andi', 'Budi', 'Cici', 'Dedi', 'Eva', 'Fani', 'Gita', 'Hana', 'Ivan', 'Joko', 'Kiki', 'Lina', 'Mira', 'Nina', 'Oscar'],
    'Gaji': [15, 18, 22, 17, 25, 28, 20, 19, 200, 21, 17, 23, 24, 2, 30]
}

df_gaji = pd.DataFrame(data_gaji)
print(df_gaji)

Output :

     Nama  Gaji
0    Andi    15
1    Budi    18
2    Cici    22
3    Dedi    17
4     Eva    25
5    Fani    28
6    Gita    20
7    Hana    19
8    Ivan   200
9    Joko    21
10   Kiki    17
11   Lina    23
12   Mira    24
13   Nina     2
14  Oscar    30

Catatan:

  • 200 (Ivan) dan 2 (Nina) kemungkinan besar adalah outlier.

Deteksi Outlier dengan Metode Statistik

a. Menggunakan Z-Score

python
# Hitung Z-Score untuk kolom 'Gaji'
df_gaji['Z-Score'] = stats.zscore(df_gaji['Gaji'])

# Tentukan outlier (|Z-Score| > 2)
df_gaji['Outlier_Z'] = np.abs(df_gaji['Z-Score']) > 2

# Tampilkan data outlier
outlier_z = df_gaji[df_gaji['Outlier_Z']]
print("Outlier (Z-Score):\n", outlier_z[['Nama', 'Gaji', 'Z-Score']])

Output :

Outlier (Z-Score):
    Nama  Gaji   Z-Score
8  Ivan   200  4.260034
13 Nina     2 -2.130017

Interpretasi:

  • Ivan (Gaji: 200) memiliki Z-Score 4.26 (jauh di atas mean).
  • Nina (Gaji: 2) memiliki Z-Score -2.13 (jauh di bawah mean).

b. Menggunakan IQR (Interquartile Range)

python
Q1 = df_gaji['Gaji'].quantile(0.25)
Q3 = df_gaji['Gaji'].quantile(0.75)
IQR = Q3 - Q1

batas_bawah = Q1 - 1.5 * IQR
batas_atas = Q3 + 1.5 * IQR

df_gaji['Outlier_IQR'] = (df_gaji['Gaji'] < batas_bawah) | (df_gaji['Gaji'] > batas_atas)

# Tampilkan data outlier
outlier_iqr = df_gaji[df_gaji['Outlier_IQR']]
print("\nOutlier (IQR):\n", outlier_iqr[['Nama', 'Gaji']])

Output :

Outlier (IQR):
    Nama  Gaji
8  Ivan   200
13 Nina     2

Interpretasi :

  • IQR juga mengidentifikasi Ivan dan Nina sebagai outlier.

Visualisasi Outlier

a. Boxplot

python
plt.figure(figsize=(8, 5))
plt.boxplot(df_gaji['Gaji'], vert=False, patch_artist=True)
plt.title('Distribusi Gaji Karyawan (Outlier Terdeteksi)')
plt.xlabel('Gaji (Juta Rupiah)')
plt.show()

Hasil :

  • Titik di sebelah kiri (2) dan kanan (200) adalah outlier.

b. Scatter Plot

python
plt.figure(figsize=(10, 5))
plt.scatter(df_gaji['Nama'], df_gaji['Gaji'], color='blue', label='Normal')
plt.scatter(outlier_iqr['Nama'], outlier_iqr['Gaji'], color='red', label='Outlier')
plt.title('Scatter Plot Gaji Karyawan')
plt.xticks(rotation=45)
plt.legend()
plt.grid()
plt.show()

Hasil:

  • Outlier terlihat jelas di luar cluster data normal.

Penanganan Outlier

Opsi 1: Menghapus Outlier

python
df_clean = df_gaji[~df_gaji['Outlier_IQR']]
print("\nData setelah menghapus outlier:\n", df_clean[['Nama', 'Gaji']])

Opsi 2: Mengganti Outlier dengan Median

python
median_gaji = df_gaji['Gaji'].median()
df_gaji['Gaji_Adjusted'] = np.where(df_gaji['Outlier_IQR'], median_gaji, df_gaji['Gaji'])
print("\nData setelah penyesuaian:\n", df_gaji[['Nama', 'Gaji', 'Gaji_Adjusted']])

Output (Contoh Opsi 2) :

     Nama  Gaji  Gaji_Adjusted
0    Andi    15           15.0
1    Budi    18           18.0
...
8    Ivan   200           21.0  # Gaji diubah ke median
13   Nina     2           21.0  # Gaji diubah ke median

Analisis Hasil

  • Outlier 200 (Ivan):
    • Kemungkinan kesalahan input (seharusnya 20).
    • Jika benar, bisa jadi direktur (perlu konfirmasi).
  • Outlier 2 (Nina):
    • Mungkin karyawan magang atau kesalahan input.

Rekomendasi:

  1. Validasi Data: Cek ke HR apakah gaji 200 dan 2 valid.
  2. Gunakan Data Bersih untuk analisis selanjutnya (misal: menghitung rata-rata gaji).

Rekomendasi studi kasus lain

  1. Coba dengan Dataset Lain:
    • Data harga rumah (outlier = harga ekstrem).
    • Data nilai mahasiswa (outlier = nilai terlalu tinggi/rendah).
  2. Bandingkan Metode:
    • Apakah Z-Score dan IQR selalu memberikan hasil sama?
  3. Eksperimen dengan Threshold:
    • Ubah batas Z-Score dari 2 menjadi 3, bagaimana hasilnya?

Kesimpulan:

  • Outlier dapat dideteksi secara statistik dan visual.
  • Penanganan outlier tergantung pada konteks data (hapus, ganti, atau biarkan).
  • Penting untuk selalu memvalidasi outlier sebelum menghapus/mengubahnya!

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *