Skip to content

Mengungkap Pasar Keuangan (Forex/Stock) dengan News Sentiment Analysis Menggunakan Python – Part #3

Pipeline Model

Yah, kali ini saya ingin berbagi hasil ‘ngoprek” karena rasa penasaran dan keingintahuan saya yang besar pada teknologi kecerdasan buatan dan aplikasinya, khususnya pada dunia finansial.

Apa itu ‘Pipeline Model’?

Pipeline model adalah sebuah pendekatan dalam pengolahan data atau pelaksanaan proses tertentu yang melibatkan serangkaian langkah atau tahap yang dilakukan secara berurutan. Setiap tahap dalam pipeline memproses data atau informasi yang diterimanya, dan kemudian hasilnya diteruskan ke tahap berikutnya. Model ini sering digunakan dalam berbagai bidang, seperti pembelajaran mesin (machine learning), rekayasa perangkat lunak, dan pemrosesan data besar (big data).

Mengapa Kita Membutuhkan ‘Pipeline Model’ pada News Sentimen Analysis?
Pipeline model sangat berguna ketika bekerja dengan dataset yang mengandung kombinasi antara teks dan angka atau numerik. Dimana prapemrosesan kedua data ini berbeda. Data Numerik atau angka, biasanya memerlukan teknik prapemrosesan seperti normalisasi, standarisasi, atau transformasi lainnya untuk memastikan bahwa data numerik berada dalam skala yang tepat dan dapat digunakan oleh model. Sedangkan, Data Teks memerlukan langkah-langkah prapemrosesan yang berbeda seperti tokenisasi, stemming, lemmatization, penghapusan stop words, dan konversi teks menjadi representasi numerik seperti TF-IDF atau embeddings.

The Idea. Ide dari berawal dari hasil pengamatan saya pada website forexfactory.com yang menjadi salah satu situs yang menyediakan News & Calendar secara online dan realtime. Sebagai contoh, lihat Gambar 1 di bawah, dapat kita lihat bahwa akan ada News dengan deskripsi ‘Final Manufacturing PMI‘ dengan impact berwarna merah (yang artinya ‘High Impact’) pada hari Senin 3 Juni 2024, jam 15:45 CET. Kita dapat lihat juga pada kolom ‘Forecast’ dan ‘Previous’ yang masing-masing telah memiliki angka 50.9 dan 50.9, sedangkan untuk kolom ‘Actual’ masih kosong atau belum ada nilainya. Kenapa? Karena memang angka ini akan dikeluarkan tepat pada hari Senin 3 Juni 2024, jam 15:45 CET, yaitu besok. Karena saya menulis artikel ini pada hari Minggu, 2 Juni 2024. Mengerti sampai disini ?

Nah, selanjutnya jika kita lihat pada Gambar 2 berikut dibawah ini, kita akan mengerti lebih dalam tentang sejarah dan detil dari News tersebut. Bahwa News ini adalah event yang rutin diumumkan setiap awal bulannya. Coba perhatikan pada kolom bagian ‘History’ disana terdapat tanggal News tipe ini dikeluarkan atau diumumkan. Dari kolom ‘History’ ini, bedanya, kita dapat melihat semua nilai (Actual, Forecast, Previous). Dan pada kolom ‘Specs’, kita dapat melihat informasi tambahan dan detilnya. Bagian yang menarik pada kolom ‘Specs’ ini bagi saya adalah terdapat informasi ‘Usual Effect‘ yang memberikan indikasi ”Actual’ greater than ‘Forecast’ is good for currency;

Now what ? Dari kedua gambar diatas, saya berkhayal, seandainya saya punya ‘mesin waktu’ sehingga saya bisa melihat ‘future’ atau masa depan. Maka saya akan bisa mengetahui nilai ‘Actual’ dari setiap News yang akan terjadi di masa depan. Dan saya bisa ambil tindakan atau aksi, BUY atau SELL. Mengerti ?

Jadi, saya buatlah sebuah machine learning dengan menggunakan Pipeline model, yang tujuannya dapat memprediksi nilai ‘Actual’ dari setiap News dengan memanfaatkan dataset tersebut.

Saya sudah pernah menjelaskan sedikit tentang ide ini. Kalian bisa menengoknya sebentar, mungkin bisa lebih memahaminya. Monggo…..s’il vous plaît.

Membuat Pipeline Model

Sebenarnya cukup sederhana membuat ‘pipeline model’ untuk keperluan News Analysis ini. Kita cukup definisikan fitur yang menggunakan data numerik dan data teks. Dalam kasus ini, fitur ‘Forecast’ dan, ‘Previous’ adalah data numerik, sedangkan ‘Decription’ adalah data teks. Lalu kita perlu mengkombinasikan kedua fitur tersebut dan mentransformasinya. ‘Preprocesor’, yang dilakukan selama fase pelatihan (training), digunakan untuk mengubah input data. Hal ini memastikan bahwa data baru diproses sebelumnya dengan cara yang sama seperti data pelatihan. Hal ini untuk memastikan konsistensi dengan transformasi data pelatihan.

# Preprocessing for numerical features
numeric_features = ['Forecast', 'Previous']
numeric_transformer = StandardScaler()

# Preprocessing for text features
text_features = 'Description'
text_transformer = TfidfVectorizer()

# Combine preprocessing for numerical and text features
preprocessor = ColumnTransformer(
    transformers=[
        ('num', numeric_transformer, numeric_features),
        ('text', text_transformer, text_features),
    ])

## Neural Network Model
# Preprocessing the training and test data
X_train_transformed = preprocessor.fit_transform(X_train)
X_test_transformed = preprocessor.transform(X_test)

Untuk keperluan project ini, saya membuat sebuah fungsi ‘create_model’ berbasis pada arsitektur Neural Network.

def create_model(input_dim):
    model = Sequential()
    model.add(Dense(128, input_dim=input_dim, activation='relu'))
    model.add(Dropout(0.2))
    model.add(Dense(64, activation='relu'))
    model.add(Dropout(0.2))
    model.add(Dense(32, activation='relu'))
    model.add(Dense(1, activation='linear'))
    model.compile(optimizer=Adam(learning_rate=0.001), loss='mean_squared_error', metrics=['mse'])
    return model

Selanjutnya kita membuat ‘Pipeline model’ dan melakukan pelatihan dengan menggunakan dataset yang ada.

# Create / Update model
model_pipeline = create_model(input_dim)
# Train the model
history = model_pipeline.fit(X_train_transformed, y_train, epochs=10, batch_size=32, validation_split=0.1)

Hasil ? Nah, penasaran dengan hasil ‘Pipeline model’ ini, khan ? Ini saya split hasil dari ujicoba machine learning berbasis Pipeline model ini. Silahkan kalian cek dan ricek ke situs atau website yang ada di dunia maya ini.

                  Description   Currency  Date     Time    Impact Forecast Previous Actual_Pred
27                        CPI m/m  CHF  06-04-2024 06:30:00 High    0.30    0.30    0.27821
31             JOLTS Job Openings  USD  06-04-2024 14:00:00 High    8.37    8.49    6.23451
37                        GDP q/q  AUD  06-05-2024 01:30:00 High    0.20    0.20    0.51078
47 ADP Non-Farm Employment Change  USD  06-05-2024 12:15:00 High  173.00  192.00   84.08122
50                 Overnight Rate  CAD  06-05-2024 13:45:00 High    4.75    5.00    2.29632
66          Main Refinancing Rate  EUR  06-06-2024 12:15:00 High    4.25    4.50    2.66889
69            Unemployment Claims  USD  06-06-2024 12:30:00 High  219.00  219.00  214.80075
91              Employment Change  CAD  06-07-2024 12:30:00 High   27.80   90.40   29.75008
92              Unemployment Rate  CAD  06-07-2024 12:30:00 High    6.20    6.10    5.59385
94    Average Hourly Earnings m/m  USD  06-07-2024 12:30:00 High    0.30    0.20    0.50176
95     Non-Farm Employment Change  USD  06-07-2024 12:30:00 High  189.00  175.00  193.76866
96              Unemployment Rate  USD  06-07-2024 12:30:00 High    3.90    3.90    3.76385

‘Actual_Pred’ adalah hasil prediksi dari machine learning. Kita boleh membandingkan apakah hasil prediksi ini baik/bagus dengan melihat nilai ‘Actual’ sebenarnya.

Kalau kurang jelas, silahkan pake mesin waktu untuk kembali ke Part #1 dan Part #2. 😄😄😄

Bon Dimanche…..Have a nice weekend…..Selamat berakhir pekan.

Colmar, 02 June 2024. Spring.

*Bonus video music cover… 😄😄😄

Leave a Reply

Your email address will not be published. Required fields are marked *