MPML
MPML
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
# Memuat dataset
df_sky = pd.read_csv('/content/Skyserver_SQL2_27_2018 6_51_39
PM.csv')
Output yang dihasilkan dari perintah diatas ialah berupa informasi data yaitu variabel yang
ada didalamnya dan juga mengetahui isi data tersebut ada sebanyak 10000 baris dan 18
kolom. Berikut hasil yang dapat ditampilkan.
mjd fiberid
0 54922 491
1 51615 541
2 52023 513
3 54922 510
4 54922 512
(10000, 18)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10000 entries, 0 to 9999
Data columns (total 18 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 objid 10000 non-null float64
1 ra 10000 non-null float64
2 dec 10000 non-null float64
3 u 10000 non-null float64
4 g 10000 non-null float64
5 r 10000 non-null float64
6 i 10000 non-null float64
7 z 10000 non-null float64
8 run 10000 non-null int64
9 rerun 10000 non-null int64
10 camcol 10000 non-null int64
11 field 10000 non-null int64
12 specobjid 10000 non-null float64
13 class 10000 non-null object
14 redshift 10000 non-null float64
15 plate 10000 non-null int64
16 mjd 10000 non-null int64
17 fiberid 10000 non-null int64
dtypes: float64(10), int64(7), object(1)
memory usage: 1.4+ MB
2. Pembagian Data:
Berapa persentase data yang akan Anda gunakan untuk pelatihan dan pengujian? 80% data
untuk pelatihan, 20% data untuk pengujian
Mengapa Anda memilih pembagian tersebut? Karena dengan menggunakan sebagian
besar data untuk pelatihan (80%) model akan memiliki kesempatan yang lebih besar
agar model yang dihasilkan akan baik. Dan dengan menggunakan data pengujian
20% memungkinkan untuk dapat menguji performa model yang tidak pernah di
lihat sebelumnya.
Kita dapat menggunakan data menjadi data training dan data testing dengan perintah yang
digunakan sebagai berikut.
Hasil data training untuk variabel X sebanyak 8000 baris karena data train yang digunakan
80% dari 10000 data, dengan jumlah kolom sebanyak 17. Dan untuk data testing sebanyak
2000 baris karena data test yang digunakan sebesar 20%.
3. Pemilihan Model:
Model klasifikasi apa yang akan Anda pertimbangkan untuk tugas ini dan mengapa?
Sebutkan setidaknya dua model dan berikan alasan pemilihan Anda. Model klasifikasi
yang digunakan ialah Random Forest Classifier menggunakan model ini karena
efektif dalam menangani banyak fitur,dapat meminimalkan overfitting, dan dapat
memberikan pentingnya fitur. Model kedua yang dapat digunakan ialah Support
Vector Machine (SVM) yang cocok digunakan untuk menyelesaikan klasifikasi
dengan banyak fitur dengan data yang kompleks.
Kita dapat menggunakan perintah memanggil kedua model yang akan digunakan dengan
memanggil library yang ada pada pyton seperti berikut.
Akurasi dengan menggunakan random forest 0.9895 dan menggunakan svm sebesar
0.7815 selisih akurasi model yang didapat sebesar 0.208 saja artinya tidak begitu banyak
perbedaan yang signifikan antar kedua model.
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
# Memuat dataset
df_sky = pd.read_csv('/content/Skyserver_SQL2_27_2018 6_51_39
PM.csv')
Dengan menggunakan k=5 memiliki akurasi yang cukup besar yaitu 0.98875 atau 98%
akurat.
6. Implementasi Cross-Validation:
Mengapa langkah k-fold cross-validation perlu dimasukkan dalam prosedur? Jelaskan
pentingnya k-fold cross-validation dalam konteks pembuatan model klasifikasi ini.
K-fold cross-validation ini penting untuk menghindari terjadi overfitting pada data
dan memastikan generalisasi model tersebut ialah model yang baik. Model akan
dinilai dengan k-fold cross-validation untuk menguji performa pada multiple subset
data.
Dengan menggunakan svm dan cv=5 juga memiliki akurasi yang cukup besar yaitu 0.95
atau 95% akurat.
rf_model = RandomForestClassifier(n_estimators=100,
max_depth=None, min_samples_split=2, random_state=42)
rf_model.fit(X_train, y_train)
#1
# Import library yang dibutuhkan
import pandas as pd
# Load dataset
file_path = '/content/winequality-red.csv'
data = pd.read_csv(file_path)
Data wine diatas berisi 1958 baris dan 12 kolom dengan rincian variabel dalam kolom
sebagai berikut.
alcohol quality
0 9.4 5
1 9.8 5
2 9.8 5
3 9.8 6
4 9.4 5
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1599 entries, 0 to 1598
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 fixed acidity 1599 non-null float64
1 volatile acidity 1599 non-null float64
2 citric acid 1599 non-null float64
3 residual sugar 1599 non-null float64
4 chlorides 1599 non-null float64
5 free sulfur dioxide 1599 non-null float64
6 total sulfur dioxide 1599 non-null float64
7 density 1599 non-null float64
8 pH 1599 non-null float64
9 sulphates 1599 non-null float64
10 alcohol 1599 non-null float64
11 quality 1599 non-null int64
dtypes: float64(11), int64(1)
memory usage: 150.0 KB
None
Proses pembagian data training digunakan untuk melatih model, sementara data
testing digunakan untuk menguji seberapa baik model tersebut dapat melakukan
prediksi pada data yang belum pernah dilihat sebelumnya. Dengan memisahkan data
pengujian, kita dapat menghindari overfitting, yaitu kondisi di mana model terlalu
"menghafal" data pelatihan dan gagal generalisasi dengan baik pada data baru.
Dengan menggunakan data pengujian yang tidak pernah dilihat selama pelatihan,
kita dapat memastikan bahwa model dapat melakukan prediksi dengan baik pada
data baru.
Prosedur pembagian data training dan testing:
- Pertama, data harus dibagi menjadi dua bagian: training set dan testing set. Pembagian
umum adalah sekitar 80% untuk training dan 20% untuk testing, tetapi ini dapat
bervariasi tergantung pada ukuran dataset dan kebutuhan spesifik.
- Kedua, terapkan normalisasi atau standarisasi pada fitur-fitur dalam dataset. Ini
biasanya dilakukan setelah pembagian data, agar tidak ada kebocoran informasi dari
data pengujian ke data pelatihan.
- Setelah itu, Gunakan training set yang telah dinormalisasi atau distandarisasi untuk
melatih model. Setelah model dilatih, gunakan testing set yang telah dinormalisasi atau
distandarisasi untuk menguji kinerja model. Evaluasi model menggunakan metrik-
metrik seperti akurasi, presisi, recall, dan lainnya untuk menilai seberapa baik model
dapat melakukan prediksi pada data baru.
#2
# Mengatasi nilai yang hilang
data.fillna(data.mean(), inplace=True) # Mengganti nilai hilang
dengan nilai rata-rata
3. Pemilihan Model:
- Sebutkan dan jelaskan minimal dua model klasifikasi yang cocok untuk tugas ini.
Mengapa model-model ini cocok untuk klasifikasi kualitas wine? Model klasifikasi yang
dapat kita gunakan ialah klasifikasi random forest, DecisionTreeClassifier dan
Logistic Regression. Dimana model model ini dapat menangani data dengan banyak
fitur (seperti data kualitas wine yang mungkin memiliki banyak atribut kimia). Tidak
sensitif terhadap skewness atau distribusi data, sehingga cocok untuk data yang
beragam seperti pada kualitas wine. Memiliki kemampuan untuk menangani
overfitting, yang berguna dalam memodelkan variasi kompleksitas kualitas wine
berdasarkan atribut kimia. Cocok untuk data dengan representasi numerik yang
beragam, seperti atribut kimia pada kualitas wine. Mudah diinterpretasikan, karena
memberikan nilai probabilitas untuk kelas tertentu.
Efisien dalam menangani masalah klasifikasi biner (misalnya, memprediksi apakah
kualitas wine baik atau buruk).
#3
# Import library untuk model
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
Pertama, kita akan membagi dataset menjadi k subset yang lebih kecil. Misalnya,
jika kita menggunakan k = 5, maka dataset akan dibagi menjadi 5 bagian (folds).
Untuk setiap iterasi, salah satu dari k subset akan digunakan sebagai set validasi
(testing), sedangkan k-1 subset lainnya digunakan sebagai data pelatihan (training).
Ini berarti kita akan melakukan pelatihan dan evaluasi model sebanyak k kali, di
mana setiap subset akan menjadi set validasi sekali. Setelah model dilatih pada k-1
subset, kita akan mengukur kinerja model dengan menggunakan subset yang
digunakan sebagai set validasi. Kinerja model (misalnya, akurasi) dari setiap iterasi
akan direkam. Setelah semua iterasi selesai, kita dapat menghitung rata-rata dari
kinerja model (misalnya, rata-rata akurasi) sebagai estimasi kinerja keseluruhan
model.
#4
# Import library untuk k-fold cross-validation
from sklearn.model_selection import cross_val_score, KFold
Hasil cross validation dari ketiga model ini memiliki hasil yang cukup berbeda yaitu untuk
rmodel random forest sebesar 91%, logistik regresi sebesar 89% dan decisiontree sebesar
86%.
#5
# Import library yang dibutuhkan
import numpy as np
import pandas as pd
from sklearn.model_selection import KFold, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, precision_score,
recall_score, f1_score
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
logreg_model = LogisticRegression(solver='liblinear') # Ganti
solver
# Inisialisasi model Logistic Regression dan Random Forest
Classifier
logreg_model = LogisticRegression()
rf_model = RandomForestClassifier()
# Parameter terbaik
print("Best parameters:", grid_search.best_params_)
- Bagaimana Anda akan menginterpretasikan hasil klasifikasi dari model? Apa implikasi
dari hasil klasifikasi tersebut terhadap penilaian kualitas wine?
Setelah melakukan prediksi, hasil klasifikasi akan menjadi nilai yang menunjukkan
kategori kualitas wine yang diprediksi untuk data baru. Jika model memberikan
prediksi kualitas wine yang tinggi (misalnya, label 1), ini mungkin mengindikasikan
bahwa wine memiliki karakteristik kimia yang sesuai dengan kualitas tinggi, seperti
keseimbangan rasa dan aroma yang baik. Sebaliknya, jika model memberikan
prediksi kualitas rendah (misalnya, label 0), ini mungkin menunjukkan adanya
kekurangan dalam atribut kimia yang diperlukan untuk kualitas yang lebih baik.
#7
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
Kualitas wine adalah tidak baik (kurang atau sama dengan 6).
import pandas as pd
# Baca dataset
#Import data
data = pd.read_csv('/content/transaction_data.csv',
skiprows=[145190])
data.head()
#2
#Missing Value
data.isna().sum()
# Membersihkan data dari nilai yang hilang atau tidak konsisten
(jika perlu)
data.dropna(inplace=True) # Menghapus baris dengan nilai yang
hilang
data.info()
/usr/local/lib/python3.10/dist-
packages/ipykernel/ipkernel.py:283: DeprecationWarning:
`should_run_async` will not call `transform_cell` automatically
in the future. Please pass the result to `transformed_cell`
argument and any exception that happen during thetransform in
`preprocessing_exc_tuple` in IPython 7.17 and above.
and should_run_async(code)
<class 'pandas.core.frame.DataFrame'>
Index: 1080909 entries, 0 to 1083816
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 UserId 1080909 non-null int64
1 TransactionId 1080909 non-null int64
2 TransactionTime 1080909 non-null object
3 ItemCode 1080909 non-null int64
4 ItemDescription 1080909 non-null object
5 NumberOfItemsPurchased 1080909 non-null int64
6 CostPerItem 1080909 non-null float64
7 Country 1080909 non-null object
dtypes: float64(1), int64(4), object(3)
memory usage: 74.2+ MB
#3
def encode_units(x):
if x<=0:
return 0
if x>= 1:
return 1
transaction_list_plus = transaction_list.applymap(encode_units)
transaction_list_plus
frequent_itemsets_plus['length'] =
frequent_itemsets_plus['itemsets'].apply(lambda x: len(x))
frequent_itemsets_plus
association_rules(frequent_itemsets_plus, metric='lift',
min_threshold=1).sort_values('lift',
ascending=False).reset_index(drop=True)
4. Analisis dan Interpretasi Aturan:
• Identifikasi aturan dengan lift yang tinggi dan confidence yang tinggi sebagai
rekomendasi strategis.
#4
#lift yang tinggi dan confidence yang tinggi
rules = association_rules(frequent_itemsets_plus, metric="lift",
min_threshold=1)
5. Strategi Pemasaran:
• Gunakan aturan yang diperoleh untuk menyarankan bundling produk atau
promosi cross-selling.
• Jika aturan mengatakan bahwa pelanggan yang membeli barang A juga
membeli barang B (misal, "Jika Bread maka juga Milk" dengan confidence
tinggi), gunakan ini untuk memposisikan barang secara strategis di toko atau
dalam promosi penjualan online.
• Hasil dari analisis juga bisa digunakan untuk mempromosikan barang2 yang
paling sering dibeli dengan diberikan diskon untuk menarik pembeli datang
ke toko tersebut.
• Gunakan strategi-strategi lainnya yang diperolah dari hasil analisis yang
didapatkan.
Plot ini adalah scatter plot yang menggambarkan aturan asosiasi antara berbagai
produk.
Sumbu Horizontal (Support): Sumbu ini menunjukkan dukungan (support) untuk
setiap aturan asosiasi. Nilai support menggambarkan seberapa sering aturan
tersebut terjadi dalam data transaksi. Nilai support diplot pada skala dari sekitar
0,7 hingga 0,4.
Sumbu Vertikal (Confidence): Sumbu ini menunjukkan tingkat kepercayaan
(confidence) untuk setiap aturan asosiasi. Confidence menggambarkan sejauh
mana item konsekuensi (consequents) cenderung dibeli jika item antecedents-
nya juga dibeli. Nilai confidence diplot pada skala dari sekitar 0,03 hingga 0,033.
Ukuran Bola: Ukuran setiap bola (bubble) mencerminkan nilai Lift, yang
mengukur hubungan antara item antecedents dan consequents. Semakin besar
bola, semakin kuat hubungannya.
Bola dengan item “JUMBO BAG RED RETROSPOT” dan “LUNCH BAG RED
RETROSPOT” memiliki nilai Lift tertinggi, menunjukkan bahwa kedua item ini
sering dibeli bersamaan dengan tingkat kepercayaan yang tinggi.
Item “GREEN REGENCY TEACUP AND SAUCER” juga memiliki Lift yang
tinggi dengan beberapa item lain.
Kesimpulan: Plot ini membantu kita memahami aturan asosiasi dalam data transaksi dan
dapat digunakan untuk strategi pemasaran atau manajemen stok.
#5
import matplotlib.pyplot as plt
import seaborn as sns
# Plot heatmap
plt.figure(figsize=(10, 8))
sns.heatmap(pivot_table, annot=True, cmap='inferno', fmt=".2f",
cbar=True)
plt.title('Association Rules')
plt.xlabel('Consequents')
plt.ylabel('Antecedents')
plt.show()
Plot ini adalah heatmap yang menggambarkan hubungan antara item-item dalam
analisis keranjang belanja.
Sumbu Vertikal (Lift): Sumbu ini menunjukkan nilai Lift, yang mengukur
seberapa kuat hubungan antara dua item. Lift menggambarkan sejauh mana item-
item tersebut cenderung dibeli bersamaan. Nilai Lift diplot pada skala dari sekitar
6.60 hingga 7.70.
Sumbu Horizontal (Consequents): Sumbu ini berisi daftar item-item seperti
“JUMBO BAG RED RETROSPOT”, “LUNCH BAG RED RETROSPOT”, dan
lainnya. Setiap kotak berwarna mewakili aturan asosiasi antara item-item ini.
Warna Kotak: Intensitas warna kotak mencerminkan kekuatan aturan asosiasi.
Semakin gelap warnanya, semakin kuat hubungannya.
Kotak dengan item “JUMBO BAG RED RETROSPOT” dan “LUNCH BAG
RED RETROSPOT” memiliki nilai Lift tertinggi, menunjukkan bahwa kedua
item ini sering dibeli bersamaan.
Item “GREEN REGENCY TEACUP AND SAUCER” juga memiliki Lift yang
tinggi dengan beberapa item lain.
Kesimpulan: Plot ini membantu kita memahami keterkaitan antara item-item dalam
keranjang belanja dan dapat digunakan untuk strategi pemasaran atau rekomendasi
produk.