Wednesday, September 23, 2026

ウォッチリスト向けのニュースセンチメントシグナルを構築する

Kevin Bartsch

ウォッチリスト向けのニュースセンチメントシグナルを構築する

記事ごとのセンチメントは便利ですが、しばしば欲しいのは企業ごとに 1 つの数字です。いまニュースの流れは ポジティブに傾いているのか、それともネガティブなのか? 本チュートリアルでは、Python と pandas を使って、 finlight のセンチメントと信頼度を、ティッカーごとに 1 つの信頼度加重スコアへ変換します。ウォッチリスト 全体が対象です。

考え方

各記事には sentiment(positive、neutral、negative)と confidence が付いています。次のようにします。

  1. 各ティッカーの最近の記事を取得します。
  2. センチメントを数値に対応づけます:+10-1
  3. 各記事を信頼度で重み付けし、ティッカーごとに平均します。

結果は -1 から +1 の間のスコアで、各企業のニュースのトーンを要約します。

コード

import pandas as pd

from finlight_client import FinlightApi, ApiConfig
from finlight_client.models import GetArticlesParams

client = FinlightApi(config=ApiConfig(api_key="YOUR_API_KEY"))

WATCHLIST = ["AAPL", "NVDA", "TSLA"]
SCORE = {"positive": 1, "neutral": 0, "negative": -1}

rows = []
for ticker in WATCHLIST:
    response = client.articles.fetch_articles(
        GetArticlesParams(tickers=[ticker], from_="2026-06-01", pageSize=100)
    )
    for article in response.articles:
        if article.sentiment is None:
            continue
        rows.append({
            "ticker": ticker,
            "score": SCORE.get(article.sentiment, 0),
            "confidence": article.confidence or 0.0,
        })

df = pd.DataFrame(rows)

# Confidence-weighted average sentiment per ticker
df["weighted"] = df["score"] * df["confidence"]
signal = df.groupby("ticker").apply(
    lambda g: g["weighted"].sum() / g["confidence"].sum()
)

print(signal.sort_values(ascending=False))

得られるもの

signal はティッカーごとに 1 つの数字です。

ticker
NVDA    0.62
AAPL    0.18
TSLA   -0.34

正のスコアは最近のニュースの流れがポジティブに傾いていることを、負のスコアはネガティブに傾いていることを 意味し、その大きさは傾きがどれだけ強く確かであるかを反映します。confidence で重み付けすると、高信頼度の 記事のまとまりは、不確かな記事の山よりもスコアを大きく動かします。

さらに良くする

  • 直近性の重み付けを加える: 時間減衰を掛けて、今日のニュースが先週のニュースより重く効くようにします。
  • 件数を加える: スコアと並べて記事数を追跡します。2 件の記事に基づく強いスコアは、50 件に基づく同じ スコアよりも証拠が弱いからです。
  • 増分更新にする: スケジュールで再実行するか、 WebSocketに切り替えて、シグナルを リアルタイムに更新します。

注意点

センチメントは 1 つの入力であって、価格予測ではありません。市場は悪材料を無視することもあれば、好材料に 過剰反応することもあります。このスコアは、件数、ソース、そしてあなた自身のモデルと組み合わせるための特徴量 として扱い、単独のトレーディングルールとしては扱わないでください。

次に読むもの

無料の API キーを取得する →