Memprediksi Penjualan Obat-Obatan Menggunakan Prophet
Halo para pembaca sekalian, setelah sebelumnya membahas mengenai Linear Programming, kali ini Saya akan bereksperimen untuk memprediksi penjualan obat-obatan untuk satu tahun ke depan menggunakan Prophet. Dataset yang saya gunakan diambil dari link Kaggle berikut: https://www.kaggle.com/milanzdravkovic/pharma-sales-data
Jadi apa itu Prophet? Prophet adalah library yang dikembangkan oleh Facebook dalam bahasa Python dan R yang digunakan untuk membuat prediksi data time series. Library ini menurut Saya jauh lebih mudah digunakan daripada library time series analysis lainnya seperti Statsmodels. Untuk lebih jelasnya, Anda dapat mengunjungi link berikut: https://facebook.github.io/prophet/. Kali ini Saya akan menggunakan Google Colaboratory.
Link Google Colaboratory: https://colab.research.google.com. Pertama, saya akan mendownload dataset terlebih dahulu dan mengekstrak filenya untuk mengambil file “pharma_sales_daily.csv”, kemudian mengunggahnya di Google Drive.
#upload dataset terlebih dahulu di Google Drive
#ketikan kode berikut lalu jalankanfrom google.colab import drive
drive.mount('/content/drive')
Anda akan diarahkan untuk menuju pada sebuah browser, klik link tersebut lalu sign in menggunakan akun Google. Setelah itu salin dan tempelkan kode yang ditampilkan pada bagian di bawah ini.
Selanjutnya klik icon files di samping kiri dan cari file drive. Cari file dataset lalu klik copy path.
Setelah cara di atas selesai dilakukan, kita akan mengimpor library yang dibutuhkan. Prophet untuk membuat prediksi, pandas untuk membaca dan mengolah data, dan matplotlib untuk visualisasi data.
#import library yang dibutuhkan
from fbprophet import Prophet
import pandas as pd
import matplotlib.pyplot as plt#membaca data (data bertipe csv), masukan path di sini
df = pd.read_csv('/content/drive/My Drive/pharma_sales_daily.csv')#tampilkan 5 data teratas
df.head()
#Ubah kolom datum menjadi datetime
df.datum = pd.to_datetime(df['datum'])#Cek kembali dengan df.info()
df.info()
Untuk tutorial ini, saya hanya akan memprediksi satu jenis obat saja yaitu obat berjenis N02BE, yakni obat-obatan golongan anilides seperti paracetamol dan kombinasinya. Saya juga ingin membagi kedua kolom menjadi kolom train (data sebelum 2019) dan kolom test (data pada tahun 2019). Prediksi dengan Prophet memerlukan dua input kolom dengan nama kolom “ds” untuk tanggal, dan “y” untuk nilai. Artinya kita juga perlu mengubah nama kolom datum dan N02BE
#Bagi data menjadi train dan test
df_train = df[df['datum']<'2019-01-01']
df_test = df[df['datum']>'2019-01-01'] #Mengambil kolom datum dengan N02BE
train = df_train[['datum','N02BE']]#Untuk keperluan visualisasi nanti, saya juga memerlukan data test
test = df_test[['datum','N02BE']]#Mengubah nama kolom untuk train saja
train = train.rename(columns={'datum':'ds', 'N02BE':'y'})
Oke, selanjutnya kita coba untuk memvisualisasi data trainnya untuk melihat pola menggunakan matplotlib.
plt.figure(figsize=(17,8))
plt.plot(train['ds'], train['y'])
Jika kita amati, terlihat bahwa data penjualan memiliki pola yang hampir sama setiap tahun (seasonal). Selanjutnya kita akan menggunakan Prophet untuk membuat prediksi.
model = Prophet()
model.fit(train)
#Prediksi data satu tahun ke depan (2019)
future = model.make_future_dataframe(365)#Hasil prediksi
forecast = model.predict(future)#Cek 5 data teratas
forecast.head()
Hasil forecast terdiri dari berbagai kolom mulai dari tahun 2014 hingga tahun 2019. Kolom yhat (Ŷ) adalah yang akan kita cocokan dengan data test yang telah dibuat di atas.
#Ambil forecast untuk tahun 2019
predict = forecast[forecast['ds']>='2019-01-01']#Melihat perbandingan data test dengan yhat
plt.figure(figsize=(12,8))plt.plot(test['datum'], test['N02BE'], label="data_test", color='orange')plt.plot(predict['ds'], predict['yhat'], label="prediksi", color='blue')plt.legend()
Karena data penjualan obat N02BE hanya sampai sekitar bulan Oktober, maka ukurannya tidak sama dengan data prediksi. Kita juga dapat menggunakan library Prophet untuk menampilkan visualisasi peramalan sebagai berikut.
model.plot(forecast)
Atau menampilkan ramalan per bulan, per tahun serta trend
model.plot_components(forecast)
Demikian tutorial singkat penggunaan Prophet untuk membuat prediksi. Anda dapat mencoba untuk memprediksi penjualan obat-obatan lainnya maupun dataset yang berbeda. Nantikan tutorial dan ulasan lainnya. See you :)