I analyze data, build statistical models, and turn raw numbers into meaningful insights.
\[{f\left(x\right)=\operatorname{x}}^2\ +\ 2x\ +\ 1\]
\[{f\left(x\right)=\operatorname{x}}^3\ -\ 3\operatorname{x}^2\ +\ 2\]
\[{f\left(x\right)=\operatorname{e}}^{(0.3x)}\]
compute_formula(x, formula) menghitung 4 jenis
formula: Linear f(x)=2x+3, Quadratic f(x)=x²+2x+1, Cubic f(x)=x³-3x²+2,
dan Exponential f(x)=e^(0.3x). Nested loop digunakan untuk menghitung
semua formula sekaligus untuk x = 1:20. Validasi input dilakukan dengan
pengecekan nama formula.
PENDAHULUAN
Task 2 bertujuan mensimulasikan sistem penjualan multi-salesperson
menggunakan konsep nested function — yaitu fungsi di dalam fungsi.
Fungsi utama simulate_sales(n_salesperson, days) mengandung
dua fungsi di dalamnya:
calc_cumulative()
Menghitung akumulasi penjualan secara bertahap
get_discount()
Menentukan besaran diskon secara kondisional berdasarkan nilai penjualan.
Logika diskon yang diterapkan: penjualan senilai ≥ 5.000
mendapat diskon 20%, ≥ 3.000 mendapat 15%,
≥ 1.000 mendapat 10%, dan di bawah 1.000 hanya
mendapat diskon 5%. Struktur perulangan dalam task ini
menggunakan nested loop: loop luar mengiterasi setiap salesperson (1
hingga 5), sementara loop dalam mengiterasi setiap hari dalam periode
simulasi (1 hingga 10 hari). Untuk setiap kombinasi salesperson-hari,
dihasilkan satu nilai sales_amount secara acak, kemudian
diskon dihitung secara otomatis, dan net_sales diperoleh
dari hasil pengurangan diskon tersebut.
Interpretasi
Grafik garis ini menampilkan akumulasi penjualan bersih (setelah diskon)
dari masing-masing 5 salesperson selama 10 hari simulasi.
Interpretasi
Tabel ini merangkum performa keseluruhan tiap salesperson dalam satu
periode 10 hari. Kolom Total_Sales menunjukkan total
penjualan, Avg_Sales adalah rata-rata penjualan per hari,
Avg_Discount adalah rata-rata diskon yang diterima, dan
Cumulative_Net adalah total pendapatan setelah diskon.
Avg_Discount lebih tinggi belum
tentu lebih baik, karena diskon tinggi berarti mereka sering berhasil
menjual di atas Rp 3.000–5.000 (yang memicu diskon besar). Perbandingan
antara Total_Sales dan Cumulative_Net
mengindikasikan seberapa besar nilai yang “hilang” akibat diskon.
PENDAHULUAN
Task 3 bertujuan membangun fungsi categorize_performance()
yang mengklasifikasikan setiap nilai penjualan ke dalam salah satu dari
lima kategori performa menggunakan struktur if-else
berlapis di dalam sebuah for loop. Lima kategori tersebut
adalah:
Penjualan ≥ 6.000
Penjualan ≥ 4.500
Penjualan ≥ 3.000
Penjualan ≥ 1.500
Penjualan < 1.500
Fungsi ini bekerja dengan cara mengiterasi setiap elemen dalam vektor
sales_amount satu per satu menggunakan
for loop, kemudian menetapkan label kategori berdasarkan
serangkaian kondisi yang diperiksa secara berurutan dari nilai tertinggi
ke terendah.
PENDAHULUAN
Task 4 bertujuan menghasilkan dataset simulasi skala besar yang merepresentasikan data karyawan dari beberapa perusahaan sekaligus. Fungsi generate_full_dataset() menggunakan nested loop dua tingkat:
Mengiterasi setiap perusahaan (Company_A hingga Company_G)
Mengiterasi setiap karyawan di perusahaan tersebut
Untuk setiap karyawan, fungsi ini membangkitkan secara acak nilai
salary, department (dari enam pilihan
departemen), dan performance_score. Kemudian diterapkan
conditional logic yang realistis: karyawan dengan
performance_score ≥ 80 akan mendapatkan
KPI_score di rentang 85–100 (mencerminkan penghargaan atas
kinerja tinggi), sementara karyawan dengan performa lebih rendah
mendapat KPI di rentang 40–84.
Avg_Performance tertinggi, yaitu company D,
company F, company E, cenderung juga memiliki
lebih banyak top performers, karena conditional logic dalam fungsi
generator memberikan KPI tinggi kepada karyawan dengan performance ≥ 80.
company A memiliki rata-rata gaji tertinggi dan
company E dan company B memiliki rata-rata
terendah. meskipun demikian, rata-rata gaji antar perusahaan tidak
memiliki perbedaan yang jauh.
Interpretasi
Terlihat dengan jelas adanya dua bagian titik yang terpisah secara
vertikal: bagian atas (KPI 85–100) yang terkonsentrasi di karyawan
dengan performance_score ≥ 80, dan bagian bawah (KPI 40–84) yang
tersebar di seluruh rentang performance score. Pola ini persis
mencerminkan conditional logic dalam fungsi
generate_full_dataset() — karyawan dengan performa ≥ 80
mendapat KPI yang jauh lebih tinggi.
\[3.141593\]
\[0.005673\]
\[6.17%\]
PENDAHULUAN
Task 6 bertujuan menerapkan dua teknik transformasi data yang paling umum digunakan dalam machine learning dan analisis statistik, serta membuat fitur-fitur baru yang lebih informatif melalui feature engineering.
normalize_columns()
Menerapkan Min-Max Normalization yang mengubah skala setiap kolom
numerik menjadi rentang [0, 1] menggunakan formula
(x − min) / (max − min)
z_score()
Menerapkan Standardisasi Z-Score yang mengubah distribusi setiap kolom
sehingga memiliki rata-rata 0 dan standar deviasi 1, menggunakan formula
(x − mean) / sd.
Kedua fungsi ini dibangun menggunakan for loop yang
mengiterasi setiap kolom numerik dalam data frame. Selain itu, task ini
juga menambahkan dua fitur baru: performance_category
(High/Medium/Low) dan salary_bracket
(Senior/Mid-level/Junior) yang mengubah variabel kontinu menjadi
variabel kategorikal yang lebih mudah diinterpretasikan.
performance_score sebelum dan sesudah dua jenis
transformasi. Boxplot Before memiliki skala asli
(40–100). Median terlihat sekitar 70, menunjukkan distribusi yang
cenderung simetris. Adanya whisker yang hampir sama panjang
mengindikasikan tidak ada skewness yang signifikan. Boxplot
Normalized memiliki skala 0–1. Bentuk dan proporsi kotak persis
sama dengan Before, hanya skalanya yang berubah. Ini kembali
mengonfirmasi sifat linear dari normalisasi. Boxplot
Z-Score memiliki median di sekitar 0 dan IQR (jarak antar
kuartil) yang jauh lebih kecil dalam satuan standar deviasi.
Interpretasi penting dari Z-Score adalah: nilai +1 berarti satu standar
deviasi di atas rata-rata, nilai -1 berarti satu standar deviasi di
bawah rata-rata. Ketiga boxplot ini secara kolektif membuktikan bahwa
transformasi tidak mengubah struktur distribusi, hanya mengubah skala —
sesuai dengan prinsip statistik yang mendasarinya.
PENDAHULUAN
Salah satu elemen utama task ini adalah kategorisasi KPI Tier
menggunakan for loop eksplisit yang mengiterasi setiap
baris dataset dan menetapkan tier berdasarkan nilai KPI:
Platinum
KPI ≥ 90
Gold
KPI 75 - 89
Silver
KPI 60 - 74
Bronze
KPI < 60
Bagian ini menyajikan analisis dari empat sudut pandang: analisis performa melalui scatter plot regression antara performance score dan KPI score, analisis kompensasi melalui boxplot distribusi gaji per perusahaan, analisis departemen melalui tabel rata-rata KPI per departemen, dan analisis top performers melalui bar chart jumlah karyawan berkinerja terbaik.
(runif(4e6, 20e6)) dan memiliki jumlah karyawan yang
sama (200), semua boxplot memiliki bentuk yang sangat mirip. Median tiap
perusahaan diperkirakan berada di sekitar Rp 12 juta (tengah distribusi
uniform), dengan whisker atas (max) mendekati Rp 20 juta dan whisker
bawah (min) mendekati Rp 4 juta. Perbedaan kecil yang terlihat antar
perusahaan adalah variasi sampling yang normal. Grafik ini mengonfirmasi
bahwa tidak ada perusahaan yang secara sistematis memberikan gaji lebih
tinggi atau lebih rendah dari perusahaan lain dalam simulasi ini.
PENDAHULUAN
Task 8 menunjukkan bagaimana fungsi dan loop bisa dikombinasikan untuk mengotomatiskan pembuatan laporan yang biasanya harus dibuat secara manual satu per satu.
generate_company_report(df, company_name)
Fungsi generate_company_report(df, company_name) menerima
seluruh dataset dan nama perusahaan sebagai input, kemudian secara
otomatis memfilter data, menghitung ringkasan statistik, menyusun
breakdown per departemen, dan mengidentifikasi top 5 performers terbaik
semua dalam satu pemanggilan fungsi. Fungsi ini kemudian dipanggil di
dalam sebuah for loop yang mengiterasi seluruh nama
perusahaan secara otomatis, menghasilkan laporan lengkap untuk setiap
perusahaan tanpa perlu menulis kode berulang. Dalam skenario produksi
sesungguhnya, loop ini bisa dikombinasikan dengan
rmarkdown::render() untuk menghasilkan file HTML atau PDF
terpisah untuk setiap perusahaan secara fully automated
| Total Karyawan | Rata-rata Gaji (IDR) | Rata-rata KPI | Rata-rata Performa | Top Performers | KPI Tertinggi | Platinum Tier | Gold Tier |
|---|---|---|---|---|---|---|---|
| 200 | Rp 12,423,404 | 71.38 | 68.65 | 42 | 99.9 | 42 | 51 |
Breakdown per Departemen:
| Department | Karyawan | Avg_Gaji | Avg_KPI | Top_Perf |
|---|---|---|---|---|
| Engineering | 28 | Rp 14,148,443 | 74.09 | 6 |
| Finance | 46 | Rp 13,206,396 | 72.35 | 9 |
| Marketing | 38 | Rp 11,649,828 | 72.30 | 8 |
| Sales | 44 | Rp 11,868,328 | 71.10 | 10 |
| Operations | 24 | Rp 11,713,080 | 70.54 | 6 |
| HR | 20 | Rp 11,750,823 | 65.16 | 3 |
Top 5 Performers:
| employee_id | department | salary | performance_score | KPI_score | KPI_tier |
|---|---|---|---|---|---|
| E0031 | HR | 15203232 | 91.6 | 99.9 | Platinum |
| E0069 | Finance | 7158151 | 81.8 | 99.7 | Platinum |
| E0080 | Operations | 5031779 | 92.7 | 99.7 | Platinum |
| E0113 | HR | 10920119 | 81.3 | 99.7 | Platinum |
| E0048 | Sales | 12420045 | 81.8 | 99.6 | Platinum |
| Total Karyawan | Rata-rata Gaji (IDR) | Rata-rata KPI | Rata-rata Performa | Top Performers | KPI Tertinggi | Platinum Tier | Gold Tier |
|---|---|---|---|---|---|---|---|
| 200 | Rp 11,600,155 | 73.02 | 69.04 | 42 | 99.8 | 42 | 57 |
Breakdown per Departemen:
| Department | Karyawan | Avg_Gaji | Avg_KPI | Top_Perf |
|---|---|---|---|---|
| HR | 29 | Rp 11,818,417 | 78.03 | 11 |
| Operations | 35 | Rp 10,393,653 | 75.77 | 10 |
| Engineering | 26 | Rp 11,420,205 | 73.85 | 4 |
| Sales | 34 | Rp 11,808,103 | 72.92 | 7 |
| Marketing | 39 | Rp 12,958,091 | 70.74 | 6 |
| Finance | 37 | Rp 11,074,396 | 68.39 | 4 |
Top 5 Performers:
| employee_id | department | salary | performance_score | KPI_score | KPI_tier |
|---|---|---|---|---|---|
| E0290 | HR | 17695953 | 92.9 | 99.8 | Platinum |
| E0278 | Operations | 4055257 | 86.7 | 99.6 | Platinum |
| E0227 | Marketing | 10473234 | 86.9 | 99.5 | Platinum |
| E0306 | HR | 15237115 | 99.7 | 99.2 | Platinum |
| E0272 | Finance | 8543407 | 81.2 | 99.1 | Platinum |
| Total Karyawan | Rata-rata Gaji (IDR) | Rata-rata KPI | Rata-rata Performa | Top Performers | KPI Tertinggi | Platinum Tier | Gold Tier |
|---|---|---|---|---|---|---|---|
| 200 | Rp 11,922,103 | 72 | 68.66 | 39 | 100 | 39 | 49 |
Breakdown per Departemen:
| Department | Karyawan | Avg_Gaji | Avg_KPI | Top_Perf |
|---|---|---|---|---|
| Operations | 40 | Rp 11,989,983 | 75.03 | 11 |
| Engineering | 34 | Rp 11,314,180 | 74.45 | 7 |
| HR | 32 | Rp 11,896,074 | 72.77 | 6 |
| Sales | 27 | Rp 12,401,105 | 71.41 | 3 |
| Finance | 34 | Rp 11,482,284 | 68.83 | 8 |
| Marketing | 33 | Rp 12,552,645 | 68.83 | 4 |
Top 5 Performers:
| employee_id | department | salary | performance_score | KPI_score | KPI_tier |
|---|---|---|---|---|---|
| E0493 | Finance | 5384547 | 92.2 | 100.0 | Platinum |
| E0552 | HR | 14086250 | 86.4 | 99.8 | Platinum |
| E0582 | Operations | 14211257 | 99.1 | 99.7 | Platinum |
| E0440 | HR | 13004722 | 85.7 | 99.5 | Platinum |
| E0471 | Operations | 5959376 | 80.1 | 99.5 | Platinum |
| Total Karyawan | Rata-rata Gaji (IDR) | Rata-rata KPI | Rata-rata Performa | Top Performers | KPI Tertinggi | Platinum Tier | Gold Tier |
|---|---|---|---|---|---|---|---|
| 200 | Rp 12,010,748 | 73.23 | 70.98 | 44 | 99.8 | 44 | 56 |
Breakdown per Departemen:
| Department | Karyawan | Avg_Gaji | Avg_KPI | Top_Perf |
|---|---|---|---|---|
| Operations | 33 | Rp 10,875,502 | 77.18 | 7 |
| Finance | 43 | Rp 12,013,072 | 75.51 | 11 |
| Engineering | 31 | Rp 12,502,393 | 71.67 | 9 |
| HR | 24 | Rp 12,372,509 | 71.59 | 4 |
| Marketing | 40 | Rp 11,477,033 | 71.47 | 8 |
| Sales | 29 | Rp 13,210,353 | 70.80 | 5 |
Top 5 Performers:
| employee_id | department | salary | performance_score | KPI_score | KPI_tier |
|---|---|---|---|---|---|
| E0709 | Finance | 5902590 | 90.7 | 99.8 | Platinum |
| E0798 | Finance | 6346829 | 80.6 | 99.8 | Platinum |
| E0616 | Finance | 4358411 | 81.6 | 99.6 | Platinum |
| E0728 | Engineering | 18531972 | 99.5 | 99.3 | Platinum |
| E0695 | Marketing | 8234040 | 97.4 | 99.2 | Platinum |
| Total Karyawan | Rata-rata Gaji (IDR) | Rata-rata KPI | Rata-rata Performa | Top Performers | KPI Tertinggi | Platinum Tier | Gold Tier |
|---|---|---|---|---|---|---|---|
| 200 | Rp 11,559,999 | 72.38 | 70.42 | 44 | 99.7 | 44 | 50 |
Breakdown per Departemen:
| Department | Karyawan | Avg_Gaji | Avg_KPI | Top_Perf |
|---|---|---|---|---|
| Marketing | 36 | Rp 11,080,272 | 74.91 | 10 |
| Operations | 30 | Rp 10,109,466 | 74.88 | 6 |
| Engineering | 33 | Rp 12,095,594 | 74.14 | 7 |
| Sales | 32 | Rp 12,731,710 | 72.72 | 6 |
| Finance | 32 | Rp 11,932,310 | 70.56 | 7 |
| HR | 37 | Rp 11,389,805 | 67.62 | 8 |
Top 5 Performers:
| employee_id | department | salary | performance_score | KPI_score | KPI_tier |
|---|---|---|---|---|---|
| E0998 | Operations | 6407084 | 89.2 | 99.7 | Platinum |
| E0806 | Finance | 13162289 | 84.3 | 99.4 | Platinum |
| E0924 | HR | 5259910 | 94.2 | 99.0 | Platinum |
| E0913 | Operations | 6546447 | 91.7 | 98.9 | Platinum |
| E0905 | Sales | 9948234 | 89.7 | 98.7 | Platinum |
| Total Karyawan | Rata-rata Gaji (IDR) | Rata-rata KPI | Rata-rata Performa | Top Performers | KPI Tertinggi | Platinum Tier | Gold Tier |
|---|---|---|---|---|---|---|---|
| 200 | Rp 11,765,272 | 74.43 | 70.68 | 61 | 99.9 | 61 | 43 |
Breakdown per Departemen:
| Department | Karyawan | Avg_Gaji | Avg_KPI | Top_Perf |
|---|---|---|---|---|
| Finance | 42 | Rp 12,526,781 | 78.21 | 17 |
| Operations | 34 | Rp 12,587,047 | 75.39 | 11 |
| HR | 29 | Rp 11,862,287 | 74.85 | 9 |
| Marketing | 32 | Rp 11,343,265 | 73.38 | 7 |
| Engineering | 37 | Rp 10,390,862 | 72.79 | 12 |
| Sales | 26 | Rp 11,827,585 | 70.26 | 5 |
Top 5 Performers:
| employee_id | department | salary | performance_score | KPI_score | KPI_tier |
|---|---|---|---|---|---|
| E1098 | Engineering | 4133454 | 89.3 | 99.9 | Platinum |
| E1136 | Finance | 4827198 | 93.1 | 99.8 | Platinum |
| E1019 | Marketing | 5305292 | 82.2 | 99.6 | Platinum |
| E1179 | Engineering | 4323536 | 80.7 | 99.3 | Platinum |
| E1167 | HR | 14149211 | 96.6 | 99.0 | Platinum |
| Total Karyawan | Rata-rata Gaji (IDR) | Rata-rata KPI | Rata-rata Performa | Top Performers | KPI Tertinggi | Platinum Tier | Gold Tier |
|---|---|---|---|---|---|---|---|
| 200 | Rp 11,807,772 | 71.8 | 68.07 | 42 | 99.8 | 42 | 45 |
Breakdown per Departemen:
| Department | Karyawan | Avg_Gaji | Avg_KPI | Top_Perf |
|---|---|---|---|---|
| HR | 25 | Rp 11,919,724 | 74.65 | 9 |
| Finance | 39 | Rp 11,234,944 | 74.11 | 6 |
| Marketing | 30 | Rp 11,960,985 | 73.69 | 8 |
| Sales | 31 | Rp 12,819,417 | 73.19 | 8 |
| Operations | 45 | Rp 11,726,234 | 71.65 | 10 |
| Engineering | 30 | Rp 11,382,881 | 63.29 | 1 |
Top 5 Performers:
| employee_id | department | salary | performance_score | KPI_score | KPI_tier |
|---|---|---|---|---|---|
| E1254 | HR | 13798243 | 85.7 | 99.8 | Platinum |
| E1313 | Finance | 4123127 | 88.2 | 99.8 | Platinum |
| E1305 | Sales | 19000434 | 81.1 | 99.4 | Platinum |
| E1215 | Operations | 5698270 | 96.6 | 99.3 | Platinum |
| E1322 | HR | 8515977 | 92.3 | 99.3 | Platinum |