Disusun Oleh :
Tiara Fatehana Aulia
6701174078
1. Double klik pada file python yang sudah ter-download, atau klik kanan lalu pilih Run as
Administrator. Jika muncul notifikasi Run as Administrator, silahkan pilih Yes.
2. Kemudian, centang Install launcher for all users dan Add python to PATH.
3. Terakhir, klik Install now.
4. Tunggu proses installing sampai selesai.
5. Jika sudah selesai, nanti aka nada notifikasi “setup was succesfull”
6. Setelah unduh selesai, kita bisa memeriksa apakah python sudah berhasil di instal pada
perangkat kita dengan membuka Command Prompt yang terlihat pada Gambar 2.
Gambar 2 Periksa Python
Gambar 3 Pip
1.4 Scikit-learn
Scikit-learn merupakan library yang ada pada python untuk menjalankan algoritma machine
learning. Scikit-learn menyediakan jenis algoritma yang cukup lengkap baik untuk supervised atapun
unsupervised learning seperti classification, regression, clustering, dimensionality reduction, model
selection, dan data preprocessing[2]. Beberapa library lain yang dibutuhkan untuk menjalankan
scikit-learn dan melakukan analisis data beserta cara install-nya sebagai berikut:
1. Pandas : pip install pandas
2. NumPy : pip install numpy
3. Scipy : pip install scipy
1.5 SK-Feature
SK-Feature merupakan library yang terdapat pada Bahasa pemograman Python. Library ini
memungkinkan untuk melakukan seleksi fitur pada sebuah dataset agar dataset menjadi data yang
bersih dan siap untuk diproses pada machine learning[2]. Untuk meng-install SK Feature dengan cara
membuka cmd dan ketik ”pip install skfeature-chappers” seperti Gambar 4.
1.6 Django
Django merupakan sebuah framework yang ditulis dengan baha pemograman Phyton. Django
merupakan framework yang sangat mudah dan ringkas dalam penulisannya dan mengikuti pola
arsitektur MVT (Model – View – Template). Django merupakan framework full-stack , yang artinya
django meliputi sisi front-end dan juga back-end[3]. Untuk meng-install Django dengan menjalankan
cmd dan ketik “pip install Django==2.1”.
Berikut merupakan script untuk load dataset dengan df=pd.read_csv. Kemudian mengambil kolom
fitur yaitu raw_X dan kolom label yaitu raw_y.
df = pd.read_csv(r'D:\\tiara\\kodinganPA\\mywebsite\\media\\documents\\e_commerce2.csv')
dataset = df.iloc[0:,3:].values
data = np.array(dataset)
#get_data
kolom_id = df.iloc[0:,0].values
raw_X = df.iloc[0:,3:increment].values #fitur
raw_y = df.iloc[0:,2].values #label
kolom_city = df.iloc[0:,1].values #label
Disini datasetnya menggunakan data e-commerce dari OLX tahun 2016, yang berisikan 96 fitur dan
118 label. Ada berbagai item, yaitu mobil, moto, rumah, tanah, dan apartment. Data e-commerce ini
sangat berpengaruh dalam memprediksi kemiskinan karena di Indonesia pada jaman sekarang,
banyak masyarakatnya yang menggunakan internet untuk melakukan jual beli. Di Indonesia juga
banyak sekali aplikasi yang menyediakan jasa untuk jual beli, seperti Tokopedia, Shopee, Lazada, dan
lain-lain. Berikut merupakan fitur-fitur yang ada dalam dataset E-Commerce.
Gambar 7 Fitur-Fitur Dataset E-commerce
2. Data Cleansing
Dataset ini masih banyak yang harus dibersihkan untuk tidak menghambat proses selanjutnya.
Berikut merupakan script untuk data cleansing.
# clean data / pre-processing
clean_X = np.nan_to_num(raw_X)
clean_y = np.nan_to_num(raw_y)
Data cleansing berguna untuk membersihkan data, jadi jika ada data yang null akan digantikan ke 0
untuk proses selanjutnya tidak terhambat.
3. Normalisasi Data
Setelah proses data cleansing, masuk ke proses normalisasi data. Normalisasi data adalah skala nilai
pada dara akan disamakan untuk memudahkan dalam proses selanjutnya. Disini penulis skala
nilainya 0-10. Ada beberapa metode untuk melakukan normalisasi data. Berikut merupakan metode-
metode normalisasi data[4].
a. Min-max normalization
Metode min-max berfungsi untuk menyeragamkan nilai menjadi rentang nilai tertentu. Kelebihan
dari metode ini adalah kita bisa mendefinisikan nilai terendah dan tertinggi dari hasil feature scaling.
Secara matematis, min-max feature scaling dari kolom/vector Y dapat diekspresikan sebagai berikut:
y −min (Y )
y ' =a+ ×(b−a) , (1)
max ( Y ) −min (Y )
Dimana y , y ' , a , b masing-masing adalah nilai asli, nilai hasil feature scaling, nilai minimum skala
baru, dan nilai maksimum skala baru hasil feature scaling.
b. Mean normalization
y−average (Y )
y'= , (2)
max ( Y )−min (Y )
Metode umum perhitungan z-score adalah menentukan mean distribusi dan standar deviasi untuk
setiap feature. Selanjutnya kita kurangi mean dari setiap feature. Kemudian kita membagi nilai (rata-
rata sudah dikurangi) dari setiap feature dengan standar deviasinya sebagai berikut:
y− ý
y'= , (3)
σ
# normalisasi data
sc = MinMaxScaler(feature_range=(0,10))
sc.fit(clean_X)
X = np.array(sc.transform(clean_X))
y = np.array(clean_y)
pada script tersebut, penulis menggunakan Min Max Normalization dengan method MinMaxScaler
dengan range 0-10.
encoder = preprocessing.LabelEncoder()
ImportantFeature = []
for row in X :
row_array = []
for number, feature_idx, in enumerate(selected_feature) :
row_array.append(row[feature_idx])
ImportantFeature.append(row_array)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, shuffle=False)
y_train_encoder = encoder.fit_transform(y_train)
Sama seperti pada bagian normalisasi, pada label dan feature encoding dilakukan dengan
menggunakan package sklearn.preprocessing. Contoh dibawah adalah penggunaan encoding untuk
label. Label encoding akan dilakukan dengan menggunakan fungsi LabelEncoder(). Terdapat 2
langkah untuk melakukan encoding label seperti berikut:
Pada Gambar 8, terdapat beberapa rangking dari fitur – fitur tersebut. Rangking pertama ada di fitur
93, kemudian di rangking 2 di fitur 95 sampai seterusnya rangking 96 di fitur 13. Dari mulai yang
relevan hingga yang tidak relevan untuk memprediksi kemiskinan. Berikut 5 fitur yang berpengaruh
dalam prediksi kemiskinan, yaitu avg_buyer_land_rent, std_buyer_land_rent,
std_viewer_rumah_sell, std_viewer_car, dan std_viewer_rumah_rent. Item yang bepengaruh
adalah tanah, rumah, dan mobil.
KNN disini digunakan untuk regresi bukan untuk klasifikasi, untuk itu pada library scikit-learn
terdapat method yaitu KneighborsRegressor. Berikut script untuk implementasi KNN.
dist = DistanceMetric.get_metric('euclidean')
cloo = KNeighborsRegressor(n_neighbors=8, metric = 'euclidean')
KNN.fit(X_train, y_train)
y_pred = KNN.predict(X_test)
2.4 Evaluasi
Pada tahap ini karena prediksi kemiskinan merupakan regresi, maka outputnya adalah nilai R-
Squared dan nilai RMSE. Matrik R2 digunakan untuk varians vector yang dapat diprediksi oleh model
regresi, seperti jika R2 = 1 maka model regresi dikatakan benar tetapi jika R 2 = negatif maka model
regresi dikatakan salah dalam memprediksi nilai. Matrik RMSE digunakan untuk melakukan
pengukuran terhadap perbedaan kesalahan antara vector actual dengan prediksi. Jika nilai RMSE
lebih rendah, maka lebih sedikit perbedaan antara nilai actual dengan nilai prediksi.
SSR
R 2=
SST
(4)
Where :
n
RMSE=
√ 1
n∑i=1
( ^y j − y 1)
2
(5)
Keterangan :
n = jumlah data
y = nilai hasil observasi
^y j = nilai hasil prediksi
i = urutan data pada database
r2 = r2_score(y_true, y_pred)
rmse = sqrt(mean_squared_error(y_true, y_pred))
untuk mencari nilai R2 menggunakan fungsi r2_score() sedangkan mencari nilai RMSE menggunakan
fungsi sqrt(mean_squared_error()). Untuk y_true merupakan data actual atau label asli, sedangkan
y_pred adalah label prediksinya.
Berikut merupakan grafik R-squared dengan metode KNN. Untuk menampilkan grafik seperti
dibawah ini menggunakan package matplotlib.pyplot import plt. Berikut merupakan script
menampilkan grafik R-Squared.
plt.plot(increment_storage,r2_storage)
plt.ylabel('RSQUARE')
plt.xlabel('Features')
plt.title('RSQUARE Result with CIFE')
# plt.show()
Gambar 9 Grafik R2
Berikut merupakan grafik RMSE dengan metode KNN. Untuk menampilkan grafik seperti
dibawah ini menggunakan package matplotlib.pyplot import plt. Berikut merupakan script
menampilkan grafik RMSE.
plt.plot(jumlah_fitur,rmse_storage)
plt.ylabel('RMSE')
plt.xlabel('Features')
plt.title('RMSE Result with CIFE')
plt.show()
fig = plt.figure()
fig.subplots_adjust(hspace=0.2, wspace=0.15, bottom=0.05, right=0.95, left=0.05)
fig.suptitle("Prediction Result CIFE")
for i,data in enumerate(ten_predictions):
ap = fig.add_subplot(2,5,(i+1))
ap.scatter(y,data)
ap.plot(y,y)
ap.set_title("{} Features".format(jumlah_fitur[i]))
plt.ylabel('First Label')
plt.xlabel('Prediction Result')
plt.show()
Pada Gambar 11 merupakan gambar grafik dari prediksi kemiskinan dari training kelipatan 10 fitur,
yaitu jumlah fitur 10, 20, 30, sampai dengan 96 fitur. Garis tengah merupakan bahwa data aktual
mendekati data prediksinya dan titik-titik berwarna biru adalah data prediksinya. Jika titik menjauhi
dari garis tengah maka data prediksinya kurang mendekati data aktual.
4 BAB IV Cara Penggunaan Aplikasi Prediksi Kemiskinan
4.1 Menu dan Cara Penggunaan
1. Struktur Menu
Adapun struktur menu pada Aplikasi Untuk Memprediksi Kemiskinan Berbasis Data E-
Commerce Menggunakan metode KNN dan seleksi Fitur Information Theoretical Based
adalah sebagai berikut :
1) Menu Dashboard
2) Menu Upload Data
Download template data e-commerce
3) Menu List Data
Prediksi kemiskinan
2. Penggunaan Aplikasi
Pada bagian ini, akan dijelaskan bagaimana cara penggunaan Aplikasi Untuk Memprediksi
Kemiskinan Berbasis Data E-Commerce Menggunakan metode KNN dan seleksi Fitur
Information Theoretical Based dari mulai registrasi aplikasi sampai dengan prediksi
kemiskinan.
1) Halaman Login
Berikut merupakan gambaran dari halaman login.
Setelah user telah memiliki akun, maka user tersebuat dapat masuk ke dalam halam utama
dengan memasukkan username serta password sebelumnya di halaman login ini. Jika user
belum memiliki akun, maka dapat menekan tombol create account yang digunakan untuk
mendaftarkan diri.
2) Halaman Registrasi
Berikut merupakan gambaran halaman registrasi.
Pada halaman registrasi digunakan untuk membuat akun jika user belum memiliki akun
sebelumnya. Di dalam halaman registrasi user harus menginputkan first name, last name,
email, username, password, repeat password.
3) Halaman Dashboard
Berikut merupakan gambaran halaman dashboard.
Pada tampilan menu utama ini user akan disediakan 2 pilihan, yang pertama adalah
dashboard yang digunakan untuk melihat deskripsi yang berhubungan dengan aplikasi
serta jenis-jenis machine learning yang akan digunakan untuk memprediksi suatu
kemiskinan di suatu daerah.
4) Halaman Upload dan List Data
Berikut merupakan halaman upload serta halaman list data.
Pada halaman upload, user dapat meng-upload data e-commerce yang dimiliki sesuai
dengan template yang telah ditetapkan oleh aplikasi.
Setalah user meng-upload data e-commerce maka akan tampil list data yang telah
diinputkan sebelumnya.
User dapat memilih jenis machine learning yang telah disediakan oleh aplikasi sesuai
dengan keinginan.
1. Views
2. urls.py
3. forms.py
5.2 Source Code Pembangunan Model
loop = 0
increment = 0
increment_storage = []
r2_storage = []
rmse_storage = []
ten_predictions = []
jumlah_fitur = []
df = pd.read_csv(r'D:\\tiara\\kodinganPA\\mywebsite\\media\\documents\\e_commerce2.csv')
dataset = df.iloc[0:,3:].values
# print(dataset.shape)
data = np.array(dataset)
# get data
kolom_id = df.iloc[0:,0].values
raw_X = df.iloc[0:,3:increment].values #fitur
raw_y = df.iloc[0:,2].values #label
kolom_city = df.iloc[0:,1].values #label
# normalisasi data
sc = MinMaxScaler(feature_range=(0,10))
sc.fit(clean_X)
X = np.array(sc.transform(clean_X))
y = np.array(clean_y)
# seleksi fitur
selected_feature = CIFE.cife(X, y, n_selected_features=96)
print(selected_feature)
encoder = preprocessing.LabelEncoder()
ImportantFeature = []
for row in X :
row_array = []
for number, feature_idx, in enumerate(selected_feature) :
row_array.append(row[feature_idx])
ImportantFeature.append(row_array)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, shuffle=False)
# print("data train",X_train.shape,y_train.shape)
# print("data test",X_test.shape,y_test.shape)
y_train_encoder = encoder.fit_transform(y_train)
#LeaveOneOut
dist = DistanceMetric.get_metric('euclidean')
cloo = KNeighborsRegressor(n_neighbors=8, metric = 'euclidean', algorithm='kd_tree')
loo = LeaveOneOut()
y_pred = []
y_true = []
for train_index, test_index in loo.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
cloo.fit(X_train, y_train)
# save the model to disk
filename = 'model'+str(increment)+'knn2.sav'
joblib.dump(cloo,filename)
y_pred.extend(cloo.predict(X_test))
y_true.extend(y_test)
r2 = r2_score(y_true, y_pred)
rmse = sqrt(mean_squared_error(y_true, y_pred))
r2_storage.append(r2)
rmse_storage.append(rmse)
increment_storage.append(increment)
jumlah_fitur.append(increment)
print("nilai rSquare :%.4f, nilai rmse=%.4f jika total jumlah data=%d" % (r2,rmse,increment))
loop+=1
ten_predictions.append(y_pred)
plt.scatter(y_true,y_pred)
plt.plot(y_true, y_true)
plt.title('Prediksi Kemiskinan')
plt.xlabel("")
plt.ylabel("prediksi")
plt.show()
fig = plt.figure()
fig.subplots_adjust(hspace=0.2, wspace=0.15, bottom=0.05, right=0.95, left=0.05)
fig.suptitle("Prediction Result CIFE")
for i,data in enumerate(ten_predictions):
ap = fig.add_subplot(2,5,(i+1))
ap.scatter(y,data)
ap.plot(y,y)
ap.set_title("{} Features".format(jumlah_fitur[i]))
plt.ylabel('First Label')
plt.xlabel('Prediction Result')
plt.show()
6 BAB V Kesimpulan
6.1 Kesimpulan
Dapat ditarik kesimpulan, bahwa K-Nearest Neighbor dapat melakukan regresi dengan hasil R2
0.5059 dan RMSE 3.4620 pada jumlah fitur 90. Pada regresi KNN dapat menggunakan library scikit-
learn untuk menghitung hasil prediksi kemiskinan dengan fungsi KNeighborsRegressor. Dalam
regresi KNN, konsep kerjanya adalah mencari nilai k terdekat dengan menghitung jarak antar
tetangganya menggunakan distance metric Euclidean. Pada klasifikasi KNN label dari nilai k terdekat
di vote dan akan menghasilkan sebuah kelas dari label tersebut. Sedangkan regresi KNN label dari
nilai k di rata-rata dan akan menghasilkan sebuah nilai R2 dan RMSE untuk mengukur tingkat
keberhasilan dan besar kesalahan pada suatu model regresinya.
DAFTAR PUSTAKA
[5] C. E. Queiros and E. S. Gelsema, “on Feature Selection.,” Proc. - Int. Conf.
Pattern Recognit., vol. 50, no. 6, pp. 128–130, 1984, doi:
10.1145/3136625.
[9] T. Chai and R. R. Draxler, “Root mean square error (RMSE) or mean
absolute error (MAE)? -Arguments against avoiding RMSE in the
literature,” Geosci. Model Dev., vol. 7, no. 3, pp. 1247–1250, 2014, doi:
10.5194/gmd-7-1247-2014.