Lingkungan virtual yang aktif ibarat rak kosong yang menanti diisi. Pada chapter ini kita mengisi rak tersebut dengan pustaka inti alur kerja machine learning: scikit-learn sebagai motor algoritmenya, ditemani NumPy, pandas, matplotlib, dan SciPy yang bekerja sebagai fondasi data dan visualisasi. Kita juga akan mengupas apa yang sebenarnya terjadi ketika pip install dijalankan — dari resolusi dependensi sampai pendaratan berkas di site-packages — supaya proses instalasi tidak terasa seperti kotak gelap. Terakhir, kita belajar mengunci versi agar proyek dapat direproduksi di komputer mana pun.

Pustaka Inti dan Perannya Masing-masing #

scikit-learn hampir tidak pernah bekerja sendirian; ia dirancang bergandengan dengan pustaka numerik di sekelilingnya. Tujuh pustaka berikut membentuk tumpukan inti pada Course ini:

PustakaPeranContoh penggunaan
NumPyStruktur array n-dimensi dan operasi numerik tervektorisasinp.mean, perkalian matriks
pandasData tabular berlabel melalui DataFramemembaca CSV, agregasi, penyaringan
SciPyRutin ilmiah: aljabar linear, optimasi, statistikscipy.linalg, distribusi statistik
matplotlibVisualisasi statis dua/tiga dimensihistogram, scatter plot
scikit-learnAlgoritme machine learning klasikKNeighborsClassifier, train_test_split
joblibPersistensi model dan paralelisme prosesjoblib.dump(model, "model.joblib")
threadpoolctlKendali jumlah thread BLAS/OpenMPmembatasi thread saat komputasi paralel

Dua nama terakhir jarang dipanggil langsung, tetapi keduanya adalah dependensi wajib scikit-learn — joblib dipakai untuk menyimpan model dan menjalankan pekerjaan paralel, sedangkan threadpoolctl menjaga lapisan numerik tidak saling berebut inti CPU. Karena keduanya terpasang otomatis, memverifikasinya ikut menjadi bukti bahwa instalasi scikit-learn berjalan lengkap.

Proses Instalasi dengan pip #

Pastikan virtual environment proyek sudah aktif (prompt berawalan (.venv)), lalu jalankan satu perintah berikut:

bash
# pasang pustaka inti ke lingkungan aktif
python3 -m pip install scikit-learn numpy pandas matplotlib scipy

Di balik layar, pip menyelesaikan empat tahap secara berurutan:

  1. Membaca metadata dari PyPI (Python Package Index) untuk setiap nama paket yang diminta beserta seluruh dependensinya.
  2. Resolusi versi: memilih kombinasi versi yang saling cocok — misalnya versi pandas yang kompatibel dengan NumPy yang dipilih.
  3. Mengunduh wheel: format paket biner siap pakai (berkas .whl) sehingga tidak perlu kompilasi dari kode sumber di mesin Anda.
  4. Memasang berkas ke folder site-packages milik lingkungan aktif — bukan lingkungan sistem.

Tahap keempat inilah alasan chapter sebelumnya menekankan aktivasi venv: pip selalu memasang ke lingkungan yang dimiliki interpreter yang menjalankannya. Versi pip yang usang kadang menolak wheel modern, jadi memperbaruinya lebih dulu adalah langkah aman:

bash
# perbarui pip di lingkungan aktif (opsional tapi dianjurkan)
python3 -m pip install --upgrade pip

Resolusi Dependensi dan Nama Distribusi #

scikit-learn secara resmi bergantung pada NumPy, SciPy, joblib, dan threadpoolctl — Anda tidak perlu menuliskannya karena pip memasangnya otomatis. Sementara itu, pustaka lain seperti pandas dan matplotlib tidak menjadi dependensi wajib scikit-learn, sehingga kita memasangnya secara eksplisit; keduanya adalah standar de facto alur kerja data di Python.

Satu detail yang sering menjegal pemula: nama distribusi tidak sama dengan nama impor. Paketnya bernama scikit-learn (dipakai saat instalasi), sedangkan modulnya diimpor sebagai sklearn. Tabel kecil berikut merangkum pasangan yang perlu diingat:

Nama distribusi (pip)Nama modul (import)
scikit-learnsklearn
imbalanced-learnimblearn
scikit-imageskimage

Mengunci Versi untuk Reproduksibilitas #

Instalasi tanpa pembatasan versi selalu memilih rilis termutakhir — nyaman saat mulai, tetapi berisiko saat proyek berjalan lama. Perilaku pustaka dapat berubah antarversi: parameter bawaan diganti, fungsi dipindahkan, hingga perubahan presisi numerik yang menggeser hasil evaluasi model. Untuk eksperimen yang harus dapat ditinjau ulang — dan model yang akan diterapkan di produksi — kombinasi versi perlu dikunci dengan operator ==:

bash
# instalasi dengan versi terkunci persis
python3 -m pip install "scikit-learn==1.5.2" "numpy==2.1.3" "pandas==2.2.3" \
    "matplotlib==3.9.2" "scipy==1.14.1"

# simpan kombinasi terverifikasi sebagai requirements.txt
python3 -m pip freeze > requirements.txt

Memverifikasi Versi yang Terpasang #

Setelah instalasi, pemeriksaan cepat dapat dilakukan dari terminal:

bash
# periksa versi tanpa membuka interpreter
python3 -c "import sklearn; print(sklearn.__version__)"

Untuk pemeriksaan terstruktur dari sisi Python, modul importlib.metadata dapat membaca versi tanpa memuat modulnya — jauh lebih ringan daripada mengimpor tujuh pustaka sekaligus:

python
# Verifikasi pustaka inti machine learning dengan importlib.metadata.
# Fungsi version() membaca metadata pustaka TANPA memuat modulnya,
# sehingga pemeriksaan cepat dan ringan.

from importlib.metadata import version

PUSTAKA = [
    "numpy",
    "pandas",
    "scipy",
    "matplotlib",
    "scikit-learn",
    "joblib",
    "threadpoolctl",
]

print("Pustaka inti yang terpasang:")
for nama in PUSTAKA:
    print(f"{nama}=={version(nama)}")

Output yang Dihasilkan:

text
Pustaka inti yang terpasang:
numpy==2.1.3
pandas==2.2.3
scipy==1.14.1
matplotlib==3.9.2
scikit-learn==1.5.2
joblib==1.5.3
threadpoolctl==3.6.0

Mari kita bedah skrip di atas:

  1. Baris 5 (from importlib.metadata import version): fungsi version() membaca metadata distribusi (informasi yang sama dengan yang dibaca pip) tanpa mengeksekusi kode pustakanya — pemeriksaan jadi cepat dan bekerja untuk pustaka yang berat saat diimpor.
  2. Baris 7–15 (PUSTAKA): daftar nama distribusi resmi, bukan nama modul — makanya tertulis scikit-learn, bukan sklearn. Urutan daftar menentukan urutan cetak sehingga keluaran mudah dibandingkan.
  3. Baris 17–19: tiap baris dicetak dalam format nama==versi — format yang sama persis dengan isi requirements.txt hasil pip freeze. Keluaran ini dengan demikian bisa disalin langsung ke berkas dependensi proyek Anda.

Bila salah satu baris memunculkan PackageNotFoundError, berarti distribusi tersebut tidak terpasang pada interpreter yang aktif — kemungkinan besar venv belum diaktifkan atau instalasi terjadi di lingkungan lain.

Daftar versi yang tercetak rapi memang meyakinkan, tetapi angka di metadata belum membuktikan pustaka benar-benar dapat bekerja. Chapter berikutnya mengangkat uji menyeluruh yang sering disebut sanity check: mengimpor semuanya, melatih model mini, dan memastikan perilakunya deterministik. Lanjut ke Chapter Memverifikasi Instalasi dengan Sanity Check.

Referensi Resmi #