Federal Açık Piyasa Komitesi (FOMC), ABD finans sisteminin önemli bir parçasıdır. Yılda 8 kez toplanır ve bu toplantıların tutanakları tüm dünyada incelenir. Doğal dil işleme alanı olan konu modellemeyi kullanarak, zaman içinde FOMC dakikalarındaki eğilimleri analiz edebilirsiniz. Bu yazıda size nasıl olduğunu göstereceğim.
İçindekiler
FOMC toplantı tutanakları her toplantıdan üç hafta sonra yayınlanır. Tutanaklar aracılığıyla, yatırımcılar FOMC toplantılarının içeriğini daha iyi anlayabilirler. Bu, FOMC kararlarının yorumlanmasına ve finansal piyasalar için olası sonuçların anlaşılmasına yardımcı olur.
Bu makalede, bir doğal dil işleme (NLP) alanı olan konu modellemesinin FOMC toplantılarının içeriğini analiz etmeye nasıl yardımcı olabileceğini gösteriyorum. Toplantı tutanaklarında tartışılan ana temaları veya konuları belirlemek için popüler bir konu modelleme yaklaşımı olan Latent Dirichlet Tahsisini (LDA) kullanıyorum.
Konu modelleme, yapılandırılmamış metin verilerine uygulanabilen bir denetimsiz öğrenme biçimidir. İstatistiksel teknikler kullanarak benzer anlama sahip konulara sahip kelime gruplarını tanımlar.
LDA, her belgenin altında yatan (gizli) konuların bir karışımına sahip olduğunu ve her konunun belirli bir sözlükteki kelimelerden oluştuğunu varsayarak çalışır. LDA, bir dizi belge içindeki kelimeleri gözlemleyerek, olasılıklı bir çerçeveye dayanarak bu kelimelere uyan konuları ortaya çıkarır.
FOMC dakikaları gibi kronolojik bir dizi metin belgesinde konuların karışımı zaman içinde değişir. LDA ile bu değişen karışımı gözlemleyebilirsiniz. FOMC konularının değişen karışımı, FOMC tartışmalarında göreceli odak alanlarına işaret ettiği için yatırımcıların ve piyasa gözlemcilerinin ilgisini çekiyor.
Uygulamalı bir örnek dahil olmak üzere konu modelleme ve LDA hakkında daha fazla bilgi edinmek için bu giriş makalesine bakın .
Aşağıdaki yaklaşımı kullanarak FOMC dakikalarındaki trendleri analiz ediyorum:
Analizim, FOMC konu modellemesine (Jegadeesh ve Wu [1] ve Saret ve Mitra [2]) yönelik akademik ve endüstri araştırmaları çalışmalarına dayanmaktadır. Araştırmacılar ve uygulayıcılar, finansal piyasa dinamikleri hakkında daha iyi içgörüler elde etmek için NLP yaklaşımlarını giderek daha fazla kullanıyorlar. Bu makale böyle bir yaklaşım sunmaktadır.
Aşağıda, analizi Python'da (v3.7.7) uygulamak için kodun temel bölümlerini adım adım açıklayacağım.
Kodun tam listesi için lütfen bu makalenin genişletilmiş sürümüne bakın .
FOMC web sitesinden (istekler ve BeautifulSoup) dakika transkriptlerini talep etmek ve ayrıştırmak, metin ön işleme (normal ifadeler ve SpaCy), sonuçları analiz etmek ve görüntülemek (pandalar, numpy, wordcloud ve matplotlib) ve LDA modelleme (gensim ).
import requests import re from bs4 import BeautifulSoup import pandas as pd import numpy as np import gensim import gensim.corpora as corpora from gensim import models import matplotlib.pyplot as plt import spacy from pprint import pprint from wordcloud import WordCloud nlp = spacy.load("en_core_web_lg") nlp.max_length = 1500000 # Ensure sufficient memory
FOMC dakika transkriptlerini doğrudan FOMC web sitesinden temin edebilirsiniz .
Bu analiz için Ekim 2007'den Temmuz 2020'ye kadar (mevcut HTML biçimlendirmesinin geçerli olduğu dönem) FOMC toplantı tutanaklarını kullandım. Bu, 2007 mali krizinin ardından 2020 COVID-19 pandemisini izleyen döneme kadar iyi bir örneklem sağlar.
URL yolunun ilk bölümü (
URLPath) ve URL uzantısı (
URLExt) için değişkenler oluşturdum , çünkü bunlar tüm dakika transkriptleri için URL yolunun ortak öğeleri. Daha sonra analiz edilen dakikalar için bir tarih listesi oluşturuyorum (
MinutesList).
Külliyat, analiz ettiğimiz FOMC toplantı transkriptlerinin koleksiyonudur. Ayrıca LDA modelimizi eğitmek için de kullanılır.
Derlemi kurmanın birkaç adımı vardır:
minparalengthçıkarılan paragrafın minimum uzunluğunu ayarlamak için çağrılan bir değişken kullanıyorum )
FOMCMinutesher bir alt listenin bir paragraf olduğu bir 'liste listesi' olarak tüm FOMC dakikalarından ( ) paragrafları içeren - bu, LDA modeline giriş için uygun bir formattır, (ii) a tüm paragrafların tek listesi (
FOMCWordCloud), yani. külliyatın bir kelime bulutu oluşturmak için kullanılan bir 'liste listesi' değil ve (iii) bütünlükteki her bir paragrafın tarihini ve 'ağırlığını' içeren bir liste (
FOMCTopix) - konu karmalarını toplamak için bu gereklidir Her bir paragrafı her toplantı için birleşik bir konu karışımına dönüştürür (ileriye bakın).
Belirli bir dakika transkriptindeki tüm paragrafların toplam ağırlıklarının toplamının 1 olacağını unutmayın.
Derlemeyi kurmak için,
PrepareCorpusher bir dakika transkriptini adım adım izleyen, kaynak yapan ve yukarıdaki adımları uygulayan bir işlev tanımlıyorum .
Şimdi külliyatımızı hazırlamak için yukarıdaki işlevi çağırabiliriz.
# Prepare corpus FOMCMinutes, FOMCWordCloud, FOMCTopix = PrepareCorpus(urlpath=URLPath, urlext=URLExt, minslist=MinutesList, minparalength=200)
Bir kelime bulutu oluşturarak hazırlanan külliyatın neye benzediğini görebiliriz.
# Generate and plot WordCloud for full corpus wordcloud = WordCloud(background_color="white").generate(','.join(FOMCWordCloud)) # NB. 'join' method used to convert the list to text format plt.imshow(wordcloud, interpolation='bilinear') plt.axis("off") plt.show()
LDA modelimizi eğitmek için önce külliyatımızdan bir sözlük oluşturmamız gerekiyor. Külliyatı kelime kimlikleriyle eşleştiriyoruz, sonra kelimeleri bir kelime torbası yaklaşımı kullanarak dönüştürüyoruz ve son olarak sonuca TF-IDF uyguluyoruz. Bu işleme metin gösterimi denir.
# Form dictionary by mapping word IDs to words ID2word = corpora.Dictionary(FOMCMinutes) # Set up Bag of Words and TFIDF corpus = [ID2word.doc2bow(doc) for doc in FOMCMinutes] # Apply Bag of Words to all documents in corpus TFIDF = models.TfidfModel(corpus) # Fit TF-IDF model trans_TFIDF = TFIDF[corpus] # Apply TF-IDF model
Kelime torbası, TF-IDF ve diğer metin gösterimleri hakkında daha fazla bilgi için bu açıklayıcı makaleye bakın .
Daha sonra kullanmak istediğimiz model parametrelerini seçip modeli çalıştırıyoruz.
SEED = 130 # Set random seed NUM_topics = 8 # Set number of topics ALPHA = 0.15 # Set alpha ETA = 1.25 # Set eta # Train LDA model using the corpus lda_model = gensim.models.LdaMulticore(corpus=trans_TFIDF, num_topics=NUM_topics, id2word=ID2word, random_state=SEED, alpha=ALPHA, eta=ETA, passes=100)
LDA modelimizin sonuçlarını nasıl değerlendiririz?
Bunu yapmak için nicel yaklaşımlar vardır, ancak bir metin külliyatına uygulandığında, mantıklı bir insan yorumuna sahip sonuçlar üretmek yararlıdır. Bu yargılama gerektirir.
Kantitatif ölçütler açısından, LDA modellerini değerlendirmek için ortak bir ölçü, tutarlılık puanıdır . Bu, bir LDA modelinin her bir konusundaki kelimeler arasındaki anlamsal benzerliği (anlam benzerliği) ölçer. Diğer her şey eşitse, daha yüksek bir tutarlılık puanı daha iyidir.
Modelimizin tutarlılığını
CoherenceModelin gensim kullanarak ölçebiliriz.
# Set up coherence model coherence_model_lda = gensim.models.CoherenceModel(model=lda_model, texts=FOMCMinutes, dictionary=ID2word, coherence='c_v') # Calculate coherence coherence_lda = coherence_model_lda.get_coherence()
Tutarlılık Puanı: 0.63779581
Bu, yukarıdaki parametrelerin dikkatli seçimine dayalı olarak oldukça iyi bir sonuçtur.
Parametrelerimize nasıl ulaştık?
Konu sayısını (
NUM_topics) seçerken, LDA modeli için 8 konu seçen Jegadeesh ve Wu [1] tarafından yönlendirildim - mantıklı konu yorumları üretme eğiliminde olduğu için aynısını seçtim.
Diğer parametreleri seçmek için, parametre değerlerini değiştirmenin model tutarlılığı üzerindeki etkisini inceleyebilirsiniz. Aşağıdaki kod, bunu
ALPHAparametre için yapar - bunu, diğer parametrelerin herhangi birinde ince ayar yapmak için şablon olarak kullanabilirsiniz.
Yukarıdaki kodun çıktısı:
Yukarıdaki çizim, 0.15'lik bir alfa'nın yüksek bir tutarlılık ürettiğini göstermektedir - bu, benimsenen alfa değeridir.
SEEDParametreyi ayarlayarak, modelin tekrarlanan çalışmalarda aynı sonuçları vermesini sağladığımızı unutmayın.
Eğitim ve analiz için aynı külliyatı kullandığımızdan, eğitimli LDA modelini yeni bir belge kümesi üzerinde çalıştırmamıza gerek yoktur. Bunun yerine, doğrudan külliyatın analizine gidebiliriz.
Amacımız, derlemedeki dakika transkriptlerinin her biri için konu karışımını hesaplamaktır. Konu karışımını toplantıların kronolojik sırasına göre çizerek (her toplantı belirli bir tarihte gerçekleştiğinden), zaman içinde konu karışımındaki herhangi bir eğilimi veya değişikliği gözlemleyebiliriz.
Külliyatımızı ayrı paragraflara böldüğümüzü hatırlayın, bu nedenle modelimiz, derlemedeki her bir transkriptin her paragrafı için bir konu karışımı üretecektir. Konu karışımı,
NUM_topicsher paragraf için modeldeki ( ) konuların her birine orantılı bir tahsisattır . Paragraftaki tüm konulardaki oranların toplamı 1 olacaktır.
Şimdi bu paragraf düzeyindeki konu karışımlarını belge düzeyinde konu karışımlarına dönüştürmemiz gerekiyor (yani, her toplantı için toplu bir konu karışımı oluşturmak için).
Bir kez daha Jegadeesh ve Wu [1] tarafından yönlendirildim. Paragraf düzeyindeki konu karışımlarının ağırlıklı toplamını kullanarak belge düzeyinde konu karışımlarını hesaplarlar (bizim durumumuzda her belge dakika transkriptidir) - Ben de aynı yaklaşımı benimsiyorum.
Külliyatımızı oluşturup içinde sakladığımızda her paragrafın ağırlığını zaten hesaplamıştık
FOMCTopix. Bu ağırlıklara her paragrafın 'belge ağırlığı' diyelim. Bunu kullanarak, aşağıdaki gibi toplu konu karışımları oluşturuyoruz:
FOMCTopixparagrafın toplantı tarihi ve belge ağırlığının yanında saklayın.
Her paragrafın konu karışımını
get_document_topicsgensim yöntemini kullanarak çıkarıyorum ve sonuçları
FOMCTopixliste formatında ekliyorum . Daha sonra bu listeyi bir veri çerçevesi nesnesine dönüştürüyorum ve
pivot_tableher dakika transkriptindeki tüm paragraflardaki konu oranlarını toplamak için yöntemi çağırıyorum .
Yukarıdaki koddaki bazı konulara isimler atadığımı unutmayın - bunu bir sonraki bölümde tartışacağım.
LDA konu modellemesi nicel bir süreç olmasına rağmen, belirlenen konular her zaman kolay yorumlamaya uygun olmayabilir. Analizinize bağlı olarak konuları nasıl etiketleyeceğiniz ve seçeceğiniz konusunda yargıda bulunabilirsiniz.
Konu modeli değerlendirmesinin konuları ve zorlukları bu makalede daha ayrıntılı olarak tartışılmaktadır .
Kelime bulutları oluşturarak konu içeriğini bir bakışta keşfedebilirsiniz.
topic = 0 # Initialize counter while topic < NUM_topics: # Get topics and frequencies and store in a dictionary structure topic_words_freq = dict(lda_model.show_topic(topic, topn=50)) topic += 1 # Generate Word Cloud for topic using frequencies wordcloud = WordCloud(background_color="white").generate_from_frequencies(topic_words_freq) plt.imshow(wordcloud, interpolation='bilinear') plt.axis("off") plt.show()
Saret ve Mitra [2] da modellemelerinde 8 konu kullandılar ancak bunu mantıklı yorumlar olarak gördükleri şeylere dayanarak daha az sayıda konuya (analizlerinde 6) yeniden yapılandırdılar.
Seçtiğim 4 konu için konulardaki kelimelere göre ve ayrıca Jegadeesh ve Wu [1] tarafından kullanılan etiketlere göre etiketler atadım. Seçtiğim konular ve etiketler:
Artık zaman içinde seçtiğimiz konuların konu karışımını çizmeye hazırız.
# Plot results - select which topics to print TopixAggDF.plot(y=['Inflation', 'Consumption', 'Market', 'Policy'], kind='line', use_index=True)
Gölgeli bölge (2008-09), bir ABD durgunluk dönemini ( NBER olarak belirlenmiş) temsil eder . X ekseni, FOMC toplantılarının tarihini gösterir ve y ekseni, analizimize göre her konunun oluşturduğu her toplantının oranını gösterir.
Zaman içinde FOMC konu karması planımızda aşağıdakileri gözlemliyoruz:
Özellikle politika tartışmaları, 2008-09 durgunluğundan bu yana FOMC için önemli bir alan olmuştur. Bu, para politikasının o zamandan beri ABD finans piyasalarında oynadığı rolü ve FOMC'nin verdiği önemli politika kararlarını yansıtır (örneğin, federal fonlar hedef oranını 2007'de% 5'in üzerindeyken, 2009'da% 0,25'in altına değiştirmek).
2014'ten bu yana enflasyonu tartışmak için harcanan zamandaki artış (yakın zamana kadar), FOMC'nin (ısrarla düşük olan) enflasyon yönetimi konusunda sahip olduğu endişenin derecesini yansıtıyor.
Benzer şekilde, durgunluk sırasında ve son zamanlarda (2007 öncesi düşük bir seviyeden başlayarak) finansal piyasaları tartışmak için normalden daha fazla zaman harcanması şaşırtıcı değildir. Bu zamanlarda başlatılan veya değiştirilen önemli piyasa işlemleri vardı.
Bazı yargı ve yorumlara tabi olmakla birlikte, LDA modeli, zaman içinde FOMC konu karışımının yararlı bir nicel özetini sağlamıştır. Bu, NLP tekniklerinin para yönetimi sürecine yardımcı olma potansiyelini göstermektedir.
Saret ve Mitra'nın [2] sözleriyle (s. 3-4, küçük değişikliklerle):
"Bir zamanlar [FOMC] toplantı tutanaklarından içgörüler elde etmeye çalışan piyasa gözlemcileri, sözde uzman" Fed gözlemcileri "nin öznel yorumuna veya kendi yorumlarına güvenmeye ihtiyaç duyuyordu. Artık varlık ayırıcılar, FOMC'nin yayınlanmış toplantı tutanaklarından içgörüler elde etmek için doğal dil işleme tekniklerini uygulayabilir ve böylece nitel girdileri daha kolay analiz edilen, nicel verilere dönüştürebilir. "
Konu modelleme, doğal dil işlemenin çok yönlü ve gelişen bir alanıdır. Bu makalede, konu modellemenin zaman içinde bir metin derlemesindeki değişen konu karışımını gözlemlemek için nasıl kullanılabileceğini gördük.
Bu tür kullanım durumları, bir dizi gerçek dünya uygulaması için potansiyele sahiptir. Para yönetimi ile ilgili olarak, finansal piyasaları anlamlandırmak için araç setine konu modellemesi zaten ekleniyor (Saret ve Mitra [2] tarafından kanıtlandığı gibi).
Bu makale ilk olarak High Demand Skills blogunda yayınlandı
[1] N. Jegadeesh ve D. Wu, Fedspeak'in Deşifre Edilmesi: FOMC Toplantılarının Bilgi İçeriği (2015), SSRN
[2] JN Saret ve S. Mitra, Fed Watching'e Yapay Zeka Yaklaşımı (2016), Two Sigma Street View
Yasal Uyarı: Bu makale yalnızca eğitim amaçlıdır. Kimseyi web sitelerini, özellikle de bu tür eylemlere karşı hüküm ve koşulları olabilecek web mülklerini kazımaya teşvik etmiyoruz.
Biçimsel bir sistem, temel sembollerden ve bu sembolleri manipüle etmek için bir dizi kuraldan oluşan bir mantık yapısıdır. Bu semboller “temeldir” çünkü içsel bir anlamları yoktur.
MIT Seçim Laboratuvarı'nda yüksek lisans araştırmacısı ve doktora derecesi olan Jesse Clark tarafından yazılmıştır.
Oakland, CA'da halka açık verileri kullanarak hava kalitesini tahmin etmek Google ve EDF, Oakland'daki hava kirliliğini haritalama çalışmalarını yayınladığında, bu çalışmanın sonuçları büyük ilgi gördü. Yayınladıkları veriler, hava kalitesinin Doğu ve Batı Oakland'daki şehir bloklarına göre nasıl değiştiğini gösteren ilk veri kümelerinden biriydi.
Daniel Fleck ve David Lubert ile yazılmıştır Dizimizin ilk blogu, bir veri bilimi projesini uygun şekilde değerlendirmek için Net Şimdiki Değer (NPV), İç Getiri Oranı (IRR) ve Karlılık Endeksi'ni (PI) kullanmaya odaklanacaktır. Ayrıca, bir veri bilimi metodolojisinin kullanılmasının, bu aynı ekonomik ölçütlerin girdilerini daha yüksek kaliteli değerlendirmeler geliştirmek için nasıl daha da iyileştirebileceğini tartışacağız.
Öz bileşimi ve SVD için yararlı olan doğrusal cebir temel kavramını anlayın Bu makalede, öz ayrıştırma veya tekil değer ayrıştırma (SVD) gibi matris çarpanlara ayırma yöntemlerini anlamanın ilginç bir yolu olan temel kavramını öğreneceksiniz. Tanımlar Temel, vektör uzaylarını (vektör setleri) tanımlamak için kullanılan bir koordinat sistemidir.