Altın Piyasasında Yapay Zeka ile Duygu Analizi

Finans dünyasında rakamlar kadar duygular da önemli. Yatırımcıların kararları, çoğu zaman haberlerdeki kelimelere ve manşetlerin tonuna göre şekilleniyor. Bu yazıda, altın piyasasına dair haberleri yapay zeka yardımıyla analiz eden bir Python sistemi kuracağız. Amacımız, haber başlıklarından piyasadaki genel hissiyatı (pozitif, negatif veya nötr) çıkarmak.

1. Haberleri Google News’ten Çekmek

İlk adımda, belirli bir konu hakkında (örneğin “gold market”) Google News üzerinden haberleri RSS formatında alıyoruz.

feedparser modülü RSS akışlarını okurken, BeautifulSoup haber sayfalarının metin içeriğini çıkarmamıza yarıyor.

import feedparser
import requests
from bs4 import BeautifulSoup
from urllib.parse import quote

def fetch_news(query, limit=10):
    url = f"https://news.google.com/rss/search?q={quote(query)}"
    feed = feedparser.parse(url)

    articles = []
    for item in feed.entries[:limit]:
        title = item.title
        link = item.link
        published = item.published
        content = extract_content(link)
        articles.append({
            "title": title,
            "link": link,
            "published": published,
            "content": content
        })
    return articles

def extract_content(url):
    try:
        html = requests.get(url, timeout=10).text
        soup = BeautifulSoup(html, "html.parser")
        return " ".join(p.get_text() for p in soup.find_all("p"))
    except Exception:
        return ""

Bu fonksiyon, belirlenen anahtar kelimeye ait haberlerin başlık, bağlantı, tarih ve içerik bilgilerini bir liste olarak döndürür.

2. Hızlı Duygu Analizi – VADER

VADER (Valence Aware Dictionary and sEntiment Reasoner), kısa metinler için tasarlanmış popüler bir duygu analiz aracıdır.

Özellikle sosyal medya veya haber başlıkları gibi kısa içeriklerde oldukça başarılıdır.

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer

def vader_sentiment(text):
    analyzer = SentimentIntensityAnalyzer()
    score = analyzer.polarity_scores(text)['compound']

    if score > 0.05:
        return "Positive"
    elif score < -0.05:
        return "Negative"
    return "Neutral"

Her haberin başlığı analiz edilerek, metindeki genel hissiyat belirlenir.

3. Finans Odaklı Duygu Analizi – FinBERT

FinBERT, finans haberleri için özel olarak eğitilmiş bir BERT modelidir.

Haberlerdeki küçük nüansları bile (örneğin “federal faiz indirimi” gibi) doğru yorumlayabilir.

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
import numpy as np

finbert = AutoModelForSequenceClassification.from_pretrained("yiyanghkust/finbert-tone")
tokenizer = AutoTokenizer.from_pretrained("yiyanghkust/finbert-tone")

LABELS = ["Positive", "Negative", "Neutral"]

def finbert_sentiment(text):
    inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512)
    with torch.no_grad():
        logits = finbert(**inputs).logits
    probs = torch.softmax(logits, dim=1).numpy()[0]
    return LABELS[np.argmax(probs)]

4. Duygu Dağılımını Hesaplamak

Artık elimizde her haberin duygu etiketi var. Şimdi bunları sayısallaştırıp genel tabloyu çıkaralım.

def summarize_sentiment(articles):
    summary = {"Positive": 0, "Negative": 0, "Neutral": 0}
    for art in articles:
        s = finbert_sentiment(art["title"])
        summary[s] += 1

    total = len(articles)
    for label, count in summary.items():
        percent = (count / total) * 100
        print(f"{label}: {count} ({percent:.1f}%)")

Örnek çıktı:

Positive: 8 (53.3%)
Negative: 5 (33.3%)
Neutral: 2 (13.3%)

5. Uygulamanın Ana Akışı

Son olarak tüm fonksiyonları bir araya getiriyoruz.

Altın piyasasıyla ilgili haberleri topluyor ve FinBERT ile analiz ediyoruz.

def main():
    queries = ["gold market", "gold price", "gold news"]
    all_articles = []
    for q in queries:
        print(f"🔎 Fetching: {q}")
        all_articles.extend(fetch_news(q))
    summarize_sentiment(all_articles)

if __name__ == "__main__":
    main()

Bu sistem, yalnızca altın piyasasında değil; borsa, kripto, döviz gibi alanlarda da kullanılabilir.

Haber akışlarını analiz ederek piyasa psikolojisini sayısal veriye dönüştürmek, modern finans analizinin en güçlü yöntemlerinden biridir.

Kaynak Kod

Projeyi GitHub’da paylaştım:

👉 https://github.com/bercanozcan/finbert-news-sentiment


Yorumlar

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir