Missing Value Ratio

Pada modul ini akan dibahas implementasi missing value ratio untuk melakukan feature selection menggunakan Python.

Data yang digunakan bisa download di https://drive.google.com/file/d/1zkYF7Ihyi8ycM_Al-4Lu-Yp9KYhhFX8_/view?usp=sharing

Import library yang digunakan, yaitu pandas.

import pandas as pd

Load data melb_data.csv ke pandas dataframe menggunakan perintah pd.read_csv().

df = pd.read_csv('melb_data.csv')

Periksa missing value pada dataset dengan menggunakan perintah missing_val = df.isnull().sum().sort_values(ascending=False). Lalu tampilkan data tersebut untuk melihat column mana saja yang memiliki missing value.

missing_val = df.isnull().sum().sort_values(ascending=False)
missing_val.head()
BuildingArea     6450
YearBuilt        5375
CouncilArea      1369
Car                62
Propertycount       0
dtype: int64

Dapat dilihat dari return diatas, colomn BuildingArea, YearBuild, CouncilArea dan Car memiliki missing value. Mari kita lihat rationya untuk memutuskan column mana yang akan dibuang dari feature.

datasize = df.shape[0]
(df.isnull().sum() / datasize).sort_values(ascending=False)
BuildingArea     0.474963
YearBuilt        0.395803
CouncilArea      0.100810
Car              0.004566
...
...
...

BuildingArea dan YearBuilt memiliki missing value diatas 35%, kemungkinan sulit untuk melakukan replacement. Untuk CouncilArea dan Car ada kemungkinan bisa dilakukan replacement.

Gunakan fungsi describe untuk melihat gambaran data. Fungsi describe akan menghitung nilai mean, dan quartile.

df[['BuildingArea', 'YearBuilt', 'CouncilArea', 'Car']].describe()
	BuildingArea	YearBuilt	Car
count	7130.000000	8205.000000	13518.000000
mean	151.967650	1964.684217	1.610075
std	541.014538	37.273762	0.962634
min	0.000000	1196.000000	0.000000
25%	93.000000	1940.000000	1.000000
50%	126.000000	1970.000000	2.000000
75%	174.000000	1999.000000	2.000000
max	44515.000000	2018.000000	10.000000

Perhatian, fungsi describe adalah fungsi untuk colomn tipe data numeric, oleh karena itu column councilArea tidak tampil.

Dapat dilihat, median dari Car adalah 2, kita gunakan nilai ini untuk melakukan replacement data missing value column car.

Dengan menggunakan data median, central tendency dari dataset tidak akan berubah.

df['Car'] = df['Car'].fillna(df['Car'].median())

Missing value berikutnya adalah CouncilArea. Pendekatan yang digunakan adalah replacement dengan data yang paling sering muncul, yaitu mode.

df['CouncilArea'].mode()
0    Moreland

Return dari perintah mode diatas adalah Moreland. Data ini akan kita gunakan untuk replace data CouncilArea missing value.

df['CouncilArea'] = df['CouncilArea'].fillna(df['CouncilArea'].mode()[0])

Column yang tersisa adalah BuildingArea dan YearBuilt. Karena missing value diatas 39%, sulit untuk melakukan replacement tanpa membuat data menjadi bias.

Pendekatan yang dilakukan adalah dengan membuang column tersebut dari dataset. Fungsi yang digunakan adalah df.dropna() dengan threshold 10% missing value, artinya column dengan missing value diatas 10% akan di buang.

df.dropna(thresh=(df.shape[0]* .9), axis=1, inplace=True)

Cek dataset column dengan perintah df.columns, dapat dilihat BuildingArea dan YearBuilt sudah didrop dari dataset.

df.columns
Index(['Suburb', 'Address', 'Rooms', 'Type', 'Price', 'Method', 'SellerG',
       'Date', 'Distance', 'Postcode', 'Bedroom2', 'Bathroom', 'Car',
       'Landsize', 'CouncilArea', 'Lattitude', 'Longtitude', 'Regionname',
       'Propertycount'],
      dtype='object')

Bisa juga lakukan pemeriksaan dengan perintah df.isnull().sum() untuk memastikan tidak ada missing value yang tersisa.

df.isnull().sum()
Suburb           0
Address          0
Rooms            0
Type             0
Price            0
Method           0
SellerG          0
Date             0
Distance         0
Postcode         0
Bedroom2         0
Bathroom         0
Car              0
Landsize         0
CouncilArea      0
Lattitude        0
Longtitude       0
Regionname       0
Propertycount    0
dtype: int64

Langkah terakhir, adalah menyimpan dataset yang telah diproses ke file baru.

df.to_csv('melb_data_processed.csv', index=False)

Dengan demikian kita sudah melakukan simulasi feature selection dengan menggunakan ratio missing value. Semoga bermanfaat.

Sharing is caring:

Leave a Comment