Friday, July 17, 2026
AI Saham

Cara Menggunakan AI untuk Menganalisis Sentimen Berita Saham Indonesia

Pendahuluan

Pergerakan harga saham tidak hanya dipengaruhi oleh laporan keuangan atau analisis teknikal. Berita mengenai aksi korporasi, perubahan regulasi, kondisi ekonomi, hingga sentimen pasar juga dapat memengaruhi keputusan investor.

Sebagai contoh:

  • Bank Indonesia mengumumkan perubahan suku bunga.
  • Sebuah emiten merilis laporan keuangan yang melampaui ekspektasi.
  • Perusahaan mengumumkan pembagian dividen.
  • Terjadi akuisisi atau merger.
  • Muncul isu hukum yang melibatkan perusahaan.

Dalam kondisi seperti itu, investor sering kali harus membaca banyak berita sebelum mengambil keputusan. Proses ini memerlukan waktu dan tidak selalu mudah dilakukan secara konsisten.

Di sinilah Artificial Intelligence (AI) dapat membantu. Dengan memanfaatkan model bahasa modern (Large Language Model/LLM), kita dapat mengotomatisasi proses membaca, merangkum, dan mengklasifikasikan sentimen berita menjadi positif, negatif, atau netral.

Pada artikel ini kita akan membangun sistem sederhana menggunakan Python untuk mengambil berita, membersihkan teks, dan melakukan analisis sentimen sebagai dasar pengambilan keputusan yang lebih terstruktur.


Apa Itu Sentiment Analysis?

Sentiment Analysis adalah proses mengidentifikasi opini atau emosi dari sebuah teks menggunakan teknik Natural Language Processing (NLP).

Dalam konteks pasar modal, hasil analisis biasanya dibagi menjadi tiga kategori:

SentimenArti
PositifBerita berpotensi memberikan dampak baik terhadap persepsi pasar.
NetralInformasi bersifat informatif tanpa indikasi positif atau negatif yang kuat.
NegatifBerita berpotensi menimbulkan tekanan terhadap harga saham.

Contoh:

Berita

BBCA membukukan laba bersih yang meningkat 18% dibandingkan tahun sebelumnya.

Hasil analisis:

Sentimen : Positif
Confidence : 0.96

Contoh lain:

Emiten XYZ mengalami penurunan laba bersih sebesar 35%.

Hasil:

Sentimen : Negatif
Confidence : 0.91

Mengapa Analisis Sentimen Penting?

Analisis teknikal hanya melihat pergerakan harga, sedangkan analisis fundamental berfokus pada kondisi perusahaan.

Namun dalam praktiknya, berita sering menjadi pemicu utama pergerakan harga dalam jangka pendek.

Sebagai contoh:

  • Pengumuman dividen dapat meningkatkan minat investor.
  • Akuisisi perusahaan dapat mengubah valuasi.
  • Penurunan peringkat utang dapat memicu aksi jual.
  • Kebijakan pemerintah dapat memengaruhi sektor tertentu.

Dengan AI, kita dapat menganalisis puluhan bahkan ratusan berita dalam waktu singkat.


Arsitektur Sistem

Alur kerja sistem yang akan kita bangun:

Portal Berita
      │
      ▼
Mengambil Artikel
      │
      ▼
Membersihkan Teks
      │
      ▼
Model AI (LLM/NLP)
      │
      ▼
Klasifikasi Sentimen
      │
      ▼
Ringkasan & Dashboard

Setiap tahap memiliki peran penting agar hasil analisis lebih akurat.


Teknologi yang Digunakan

Pada artikel ini kita menggunakan:

  • Python
  • Pandas
  • Requests
  • BeautifulSoup
  • Transformers
  • PyTorch
  • OpenAI API (opsional)
  • Ollama (opsional untuk model lokal)

Model OpenAI dapat diakses melalui library Python resmi yang menggunakan Responses API sebagai antarmuka utama.

Untuk pengguna yang mengutamakan privasi atau ingin menjalankan model di komputer sendiri, Ollama menyediakan API lokal dan juga kompatibilitas dengan sebagian antarmuka OpenAI.


Instalasi Library

Install seluruh dependensi.

pip install pandas requests beautifulsoup4

Kemudian:

pip install transformers torch

Jika ingin menggunakan OpenAI:

pip install openai

Atau jika ingin menjalankan model secara lokal menggunakan Ollama:

pip install ollama

Library Python resmi untuk OpenAI maupun Ollama menyediakan cara yang mudah untuk mengintegrasikan model AI ke dalam aplikasi Python.


Struktur Project

Gunakan struktur proyek seperti berikut.

ai-stock-news/

│
├── app.py
├── news.py
├── sentiment.py
├── summarize.py
├── requirements.txt
└── data/

Keterangan:

  • news.py → mengambil berita
  • sentiment.py → analisis sentimen
  • summarize.py → membuat ringkasan AI
  • app.py → aplikasi utama

Struktur modular seperti ini memudahkan pengembangan di masa depan.


Mengambil Berita

Misalnya menggunakan RSS Feed atau API berita.

Contoh sederhana menggunakan requests.

import requests

url = "https://example.com/api/news"

response = requests.get(url)

print(response.status_code)

Jika menggunakan RSS Feed, data biasanya berupa XML dan dapat diproses menggunakan parser XML atau BeautifulSoup.


Menyimpan Data ke DataFrame

Misalnya hasil yang diperoleh:

news = [

    {
        "title":"BBCA Meningkatkan Laba",
        "content":"Laba meningkat..."
    },

    {
        "title":"TLKM Membagikan Dividen",
        "content":"Dividen sebesar..."
    }

]

Kemudian:

import pandas as pd

df = pd.DataFrame(news)

print(df)

DataFrame memudahkan proses pembersihan, analisis, dan visualisasi.


Membersihkan Teks

Berita sering mengandung karakter yang tidak diperlukan.

Contoh sederhana:

import re

def clean(text):

    text = text.lower()

    text = re.sub(
        r"[^a-zA-Z0-9 ]",
        "",
        text
    )

    return text

Gunakan:

df["clean"] = df["content"].apply(clean)

Tahap ini membantu mengurangi noise pada data sebelum diproses oleh model.


Contoh Dataset

JudulIsi
BBCA Catat Laba Bersih Naik 18%Kinerja keuangan meningkat…
TLKM Bagikan DividenDividen tunai diumumkan…
Emiten XYZ Rugi BesarPenurunan laba…

Setelah dibersihkan:

Clean Text
bbca catat laba bersih naik
tlkm bagikan dividen
emiten xyz rugi besar

Dataset seperti ini siap digunakan untuk proses analisis sentimen.


Analisis Sentimen Menggunakan Hugging Face

Kita dapat menggunakan model siap pakai melalui pipeline dari pustaka transformers.

from transformers import pipeline

classifier = pipeline(
    "sentiment-analysis"
)

Kemudian:

result = classifier(
    "Bank mencatat kenaikan laba yang signifikan."
)

print(result)

Hasil umumnya berupa label sentimen beserta skor kepercayaan (confidence score).

Perlu diingat bahwa banyak model umum dilatih menggunakan data berbahasa Inggris. Untuk berita berbahasa Indonesia, hasilnya bisa bervariasi sehingga sebaiknya dilakukan evaluasi atau menggunakan model yang memang mendukung bahasa Indonesia jika tersedia. Penelitian juga menunjukkan bahwa model LLM dapat memberikan hasil yang baik, tetapi tetap memiliki keterbatasan pada teks yang ambigu atau bernuansa tertentu.


Menambahkan Hasil ke DataFrame

df["sentiment"] = df["clean"].apply(
    lambda x: classifier(x)[0]["label"]
)

Sekarang setiap berita memiliki label sentimen yang dapat dianalisis lebih lanjut.

Mengapa Menggunakan LLM?

Model klasifikasi sentimen tradisional biasanya hanya menghasilkan output seperti:

Positive

atau

Negative

Sedangkan LLM dapat memberikan hasil seperti:

Sentimen : Positif

Alasan :

Perusahaan berhasil meningkatkan laba bersih sebesar
18%.

Dividen meningkat.

Prospek bisnis dinilai baik.

Risiko masih relatif rendah.

Informasi seperti ini jauh lebih bermanfaat bagi investor dibandingkan hanya sebuah label.


Menggunakan OpenAI API

Install library:

pip install openai

Import library:

from openai import OpenAI

client = OpenAI()

Secara default, library akan menggunakan API key yang disimpan pada environment variable OPENAI_API_KEY.


Membuat Prompt Analisis

Prompt yang baik akan menghasilkan jawaban yang lebih konsisten.

Contoh:

prompt = f"""
Anda adalah analis saham Indonesia.

Analisis berita berikut.

Berita:

{news}

Jawab dalam format:

Sentimen:
Alasan:
Risiko:
Peluang:
Kesimpulan:
"""

Dengan format seperti ini, setiap hasil analisis memiliki struktur yang seragam sehingga mudah diproses lebih lanjut.


Mengirim Permintaan ke Model

Contoh menggunakan Responses API:

response = client.responses.create(
    model="gpt-4.1-mini",
    input=prompt
)

print(response.output_text)

Gunakan model yang sesuai dengan kebutuhan biaya, kecepatan, dan kualitas hasil.


Contoh Hasil AI

Misalnya berita:

BBCA melaporkan kenaikan laba bersih sebesar 18% dibandingkan tahun sebelumnya.

AI dapat menghasilkan ringkasan seperti:

Sentimen : Positif

Alasan :
Laba meningkat.

Profitabilitas membaik.

Risiko :
Tekanan ekonomi global masih perlu dipantau.

Peluang :
Kinerja yang kuat dapat meningkatkan kepercayaan investor.

Kesimpulan :
Berita ini cenderung memberikan sentimen positif terhadap saham BBCA.

Hasil seperti ini lebih mudah dipahami dibandingkan membaca seluruh artikel berita.


Analisis Banyak Berita

Misalkan terdapat beberapa berita.

articles = [
    "...",
    "...",
    "..."
]

Loop:

results = []

for article in articles:

    response = client.responses.create(
        model="gpt-4.1-mini",
        input=article
    )

    results.append(response.output_text)

Setelah selesai, setiap berita telah memiliki hasil analisis AI.


Menyimpan Hasil ke DataFrame

import pandas as pd

df = pd.DataFrame({

    "News": articles,

    "Analysis": results

})

Kemudian simpan:

df.to_csv(
    "analysis.csv",
    index=False
)

Menggunakan Ollama

Bagi yang tidak ingin menggunakan layanan cloud, model dapat dijalankan secara lokal menggunakan Ollama.

Pastikan Ollama sudah terinstal dan model telah diunduh, misalnya:

ollama pull llama3.1

Contoh penggunaan:

import ollama

response = ollama.chat(

    model="llama3.1",

    messages=[

        {
            "role":"user",
            "content":prompt
        }

    ]

)

print(
    response["message"]["content"]
)

Kelebihan Ollama:

  • Tidak memerlukan koneksi internet setelah model tersedia.
  • Data tetap berada di komputer sendiri.
  • Tidak dikenakan biaya per permintaan.

Kekurangannya adalah kebutuhan RAM dan CPU/GPU yang lebih besar dibanding menggunakan layanan cloud.


Membandingkan OpenAI dan Ollama

FiturOpenAIOllama
Koneksi InternetYaTidak (setelah model tersedia)
BiayaSesuai penggunaanGratis
KecepatanTinggiBergantung pada spesifikasi komputer
PrivasiData dikirim ke layanan APIData tetap lokal
KemudahanSangat mudahPerlu instalasi model

Pemilihan solusi bergantung pada kebutuhan proyek, anggaran, dan kebijakan privasi.


Memberikan Skor Sentimen

Selain teks, kita dapat meminta AI memberikan skor numerik.

Contoh prompt:

Berikan nilai sentimen.

-100 = Sangat Negatif

0 = Netral

100 = Sangat Positif

Contoh hasil:

BeritaScore
BBCA laba naik92
TLKM bagikan dividen80
Emiten rugi-75

Skor ini dapat digunakan untuk membuat peringkat sentimen beberapa berita.


Ringkasan Banyak Berita

Misalnya terdapat lima berita tentang satu emiten.

Alih-alih membaca satu per satu, gabungkan seluruh berita menjadi satu teks, kemudian minta AI membuat ringkasan.

Prompt:

Ringkas seluruh berita berikut.

Fokus pada:

- kondisi perusahaan

- peluang

- risiko

- dampak terhadap investor

AI akan menghasilkan ringkasan yang jauh lebih singkat namun tetap mempertahankan informasi penting.


Mengidentifikasi Risiko

LLM juga dapat diminta mengekstrak faktor risiko.

Contoh prompt:

Identifikasi seluruh risiko investasi pada berita berikut.

Contoh hasil:

  • Penurunan laba.
  • Ketidakpastian ekonomi.
  • Risiko nilai tukar.
  • Penurunan permintaan.
  • Persaingan meningkat.

Daftar seperti ini membantu investor memahami faktor yang perlu dipantau.


Mengidentifikasi Peluang

Prompt:

Apa peluang pertumbuhan perusahaan ini?

Contoh hasil:

  • Pertumbuhan laba.
  • Ekspansi bisnis.
  • Dividen meningkat.
  • Efisiensi operasional.
  • Akuisisi perusahaan.

Membuat Ringkasan Satu Kalimat

Prompt:

Ringkas berita ini menjadi satu kalimat untuk investor.

Contoh:

BBCA membukukan pertumbuhan laba yang solid sehingga sentimen pasar cenderung positif, meskipun kondisi ekonomi global masih perlu diperhatikan.

Ringkasan singkat seperti ini cocok ditampilkan pada dashboard atau notifikasi.


Membuat Tabel Hasil Analisis

Gabungkan seluruh informasi dalam DataFrame.

JudulSentimenScoreRisikoPeluang
BBCA laba naikPositif92InflasiPertumbuhan laba
TLKM dividenPositif80KompetisiDividen
XYZ rugiNegatif-75Penjualan turunRestrukturisasi

Struktur seperti ini memudahkan analisis lanjutan menggunakan Python.


Visualisasi Distribusi Sentimen

Misalnya:

summary = df["Sentiment"].value_counts()

summary.plot.bar()

Hasil visualisasi dapat menunjukkan apakah mayoritas berita pada periode tertentu bersifat positif, netral, atau negatif.

Arsitektur AI Stock Assistant

Diagram sederhana sistem yang akan dibangun:

                    Portal Berita
                          │
                          ▼
                Mengambil Berita Terbaru
                          │
                          ▼
                 AI Sentiment Analysis
             (OpenAI / Ollama / LLM Lokal)
                          │
         ┌────────────────┼────────────────┐
         ▼                ▼                ▼
   Ringkasan AI     Skor Sentimen     Risiko & Peluang
         │                │                │
         └────────────────┼────────────────┘
                          ▼
                   SQLite / PostgreSQL
                          │
         ┌────────────────┼────────────────┐
         ▼                ▼                ▼
     Streamlit       Telegram Bot      Dashboard Web

Dengan arsitektur ini, seluruh proses dapat berjalan otomatis tanpa perlu membaca berita satu per satu.


Menyimpan Hasil ke SQLite

Simpan hasil analisis agar dapat dibandingkan dari waktu ke waktu.

import sqlite3

conn = sqlite3.connect("sentiment.db")

df.to_sql(
    "news_sentiment",
    conn,
    if_exists="append",
    index=False
)

conn.close()

Contoh struktur tabel:

TanggalEmitenJudulSentimenScore
2026-07-17BBCALaba NaikPositif92
2026-07-17TLKMDividenPositif85
2026-07-17GOTOAkuisisiNetral55

Dengan histori ini, kita dapat menganalisis perubahan sentimen dari waktu ke waktu.


Membuat Dashboard Streamlit

Install:

pip install streamlit

Contoh dashboard sederhana:

import streamlit as st

st.title("AI Sentiment Dashboard")

st.dataframe(df)

Tambahkan metrik:

st.metric(
    "Berita Positif",
    len(
        df[df["Sentiment"]=="Positive"]
    )
)

Dashboard juga dapat dilengkapi dengan filter berdasarkan emiten, tanggal, atau sektor.


Visualisasi Sentimen

Distribusi sentimen:

chart = (
    df["Sentiment"]
    .value_counts()
)

st.bar_chart(chart)

Visualisasi seperti ini memudahkan pengguna melihat kondisi pasar secara sekilas.


Ringkasan Harian dengan AI

Gabungkan seluruh berita dalam satu hari, lalu minta AI membuat ringkasan.

Prompt:

Berikut kumpulan berita saham Indonesia hari ini.

Buatkan ringkasan maksimal 300 kata.

Sebutkan:

- kondisi pasar

- saham yang paling positif

- saham yang paling negatif

- risiko terbesar

- peluang terbesar

Contoh hasil:

Hari ini sektor perbankan menunjukkan sentimen positif didorong oleh pertumbuhan laba beberapa emiten besar. Sementara itu, sektor teknologi cenderung netral karena investor masih menunggu laporan keuangan berikutnya. Risiko utama berasal dari ketidakpastian ekonomi global, sedangkan peluang terbesar terlihat pada emiten yang mengumumkan ekspansi bisnis dan pembagian dividen.

Ringkasan ini dapat menjadi bahan awal sebelum melakukan analisis lebih mendalam.


Mengirim Ringkasan ke Telegram

Install library:

pip install python-telegram-bot

Contoh fungsi:

import requests

url = (
    f"https://api.telegram.org/bot{TOKEN}/sendMessage"
)

requests.post(
    url,
    data={
        "chat_id": CHAT_ID,
        "text": summary
    }
)

Contoh pesan:

📈 AI Market Summary

Mayoritas berita hari ini positif.

Saham dengan sentimen terbaik:

• BBCA
• BMRI
• TLKM

Risiko terbesar:

• Pelemahan nilai tukar
• Ketidakpastian suku bunga

Peluang:

• Pertumbuhan laba
• Dividen

Dengan begitu, ringkasan dapat diterima langsung melalui Telegram setiap pagi.


Menjalankan Otomatis

Gunakan cron pada Linux.

Edit crontab:

crontab -e

Jalankan setiap hari kerja pukul 07.00:

0 7 * * 1-5 python3 app.py

Urutan proses:

  1. Mengambil berita terbaru.
  2. Menganalisis sentimen menggunakan AI.
  3. Menyimpan hasil ke database.
  4. Memperbarui dashboard.
  5. Mengirim ringkasan ke Telegram.

Menggabungkan dengan Stock Screener

Artikel sebelumnya telah membahas pembuatan screener saham.

Sekarang tambahkan kolom sentimen.

TickerScore TeknikalSentimen AITotal
BBCA909291
BMRI889089
TLKM848082

Contoh perhitungan:

df["Final Score"] = (
    df["Technical Score"] * 0.6
) + (
    df["Sentiment Score"] * 0.4
)

Bobot tersebut hanyalah contoh. Anda dapat menyesuaikannya sesuai strategi yang digunakan.


Menggabungkan dengan Backtesting

Sebelum menggunakan sentimen sebagai dasar keputusan investasi, Anda juga dapat mengujinya melalui backtesting.

Contoh aturan:

  • Buy jika:
    • MA20 > MA50.
    • Sentimen > 70.
  • Sell jika:
    • MA20 < MA50.
    • Sentimen < 30.

Dengan pendekatan ini, analisis teknikal dan analisis sentimen saling melengkapi.


Best Practice

Agar hasil analisis lebih bermanfaat:

  • Gunakan lebih dari satu sumber berita untuk mengurangi bias.
  • Simpan hasil analisis agar dapat dibandingkan antarperiode.
  • Evaluasi kualitas model secara berkala.
  • Gunakan prompt yang konsisten.
  • Hindari mengambil keputusan hanya berdasarkan satu berita.

AI sebaiknya menjadi alat bantu analisis, bukan pengganti penilaian investor.


Keterbatasan AI

Walaupun LLM sangat membantu, ada beberapa hal yang perlu diperhatikan:

  • Model dapat salah memahami konteks berita.
  • Berita yang bersifat satir atau ambigu bisa menghasilkan klasifikasi yang kurang tepat.
  • Analisis tidak selalu mempertimbangkan kondisi fundamental perusahaan secara menyeluruh.
  • Model tidak memiliki akses ke informasi yang tidak tersedia dalam teks yang dianalisis.

Karena itu, hasil AI sebaiknya dipadukan dengan analisis fundamental dan teknikal.


Struktur Proyek

ai-stock-assistant/

├── app.py
├── news.py
├── sentiment.py
├── summarize.py
├── dashboard.py
├── telegram.py
├── database.py
├── scheduler.py
├── requirements.txt
└── data/

Struktur modular memudahkan pemeliharaan dan pengembangan proyek.


FAQ

Apakah AI dapat memprediksi harga saham?

Tidak. AI dapat membantu menganalisis informasi dan menemukan pola, tetapi tidak dapat menjamin arah pergerakan harga di masa depan.

Apakah Ollama lebih baik daripada OpenAI?

Keduanya memiliki kelebihan. OpenAI umumnya memberikan kualitas analisis yang sangat baik dan mudah digunakan, sedangkan Ollama unggul dari sisi privasi karena model berjalan di komputer sendiri.

Apakah sistem ini hanya untuk saham Indonesia?

Tidak. Dengan mengganti sumber berita dan data harga, sistem yang sama dapat digunakan untuk saham luar negeri, ETF, maupun aset lain seperti mata uang kripto.


Kesimpulan

Dalam tiga bagian artikel ini kita telah membangun fondasi AI Stock Assistant menggunakan Python. Mulai dari mengambil berita, melakukan analisis sentimen, menghasilkan ringkasan otomatis, hingga mengintegrasikan hasilnya ke dashboard dan notifikasi Telegram.

Rangkaian artikel ini juga melengkapi seri sebelumnya:

  • Mengambil data harga saham menggunakan yfinance.
  • Membuat dashboard portofolio dengan Streamlit.
  • Membangun stock screener otomatis.
  • Melakukan backtesting strategi Moving Average.
  • Menambahkan analisis sentimen berbasis AI.

Dengan menggabungkan analisis harga, indikator teknikal, dan sentimen berita, Anda dapat membangun sistem pemantauan saham yang lebih komprehensif. Meskipun demikian, hasil analisis AI tetap perlu dipadukan dengan riset dan pertimbangan investasi lainnya sebelum mengambil keputusan.

Similar Posts

Leave a Reply

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