Analyzing Earnings Conference Call With NLP

Anirudh @ krysins.com
The Startup
Published in
7 min readOct 25, 2020
Quarterly call word sentiment overlaid with stock prices

Overview

The objective here is to analyse the quarterly earnings conference call transcripts, with the help of NLP, to identify the new themes, opportunities and risks that company management is sharing with the investors.

The toolkit used for analysis includes Spacy for natural language processing, Scikit-learn’s TF-IDF to identify topics of higher importance during call, as well McDonald’s sentiment word list to identify the sentiments during the call.

In this post I will describe what has been achieved in words without code. I have realised that writing technical code on medium can get a bit dry to read so I’ll just be discussing the concepts, tools and usage of tools here. To see the code with detailed description of flow and function calls, I have created a well documented Jupyter-Notebook on Github and one should be able to follow it step by step.

Github link:

What are earnings conference call?

Every quarter, publicly listed companies are required to publish their quarterly results and file reports with the regulatory body security and exchange commission (SEC). Besides publishing these reports, on the day of the earnings release the companies, the leadership team of the company (CEO, CFO, etc.) give an overview of the results to the institutional and individual investors. The company management also have Q&A with the buy- and sell-side research analysts. These calls are also recorded and uploaded in audio on companies investor filing section.

Conference calls allow companies to highlight successes during prosperous times and calm fears during adverse ones (source: investopedia).

How do you get earnings call transcripts?

Historically, the earnings conference calls took place via telephone. These days they are also live streamed on internet. The recordings of these calls are later available on company websites in investor relationship section.

The audio live stream of the call (or the recordings) can be converted into text using various text-to-speech api such as that from google. (Here is an example application using google text-to-speech APIs that I built earlier but in a different context, it can easily be leveraged in a use case like this).

The transcripts are also available on various websites like fool.com (with some delay).

What has been done here?

First, using BeautifulSoup, I have cleaned the earning calls transcript of Facebook, Google, Amazon and Microsoft for periods Q3–2019, Q4–2019, Q1–2020 and Q2–2020. By clean I mean I have removed the html information.

Next, using Spacy, each of the call transcripts are parsed to identify ‘named entities’, ‘parts-of-speech’ etc. Following the identification, I have removed information like names of people, dates, numbers, prepositions and stop-words as they do not contribute to idea of finding new topics / sentiment. Stop-words are words that do not convey any useful information for our analysis. Typically, these words are like ‘is’, ‘the’, ‘and’ etc. I have enhanced this with custom list of words like ‘operator’, ‘quarter’, ‘analyst’, ‘welcome’ and so on.

Following this, I have used Gensim library to identify bi-grams such as ‘vice president’, ‘machine learning’ and removed the non relevant ones like ‘vice president’ (and kept words like ‘machine learning’, ‘renewable energy’ etc.).

For each company I have 4 earnings call transcript. Using scikit-learn’s Term Frequency — Inverse Document Frequency (TF-IDF), I have identified the top 100 words from each of the earnings call transcripts, i.e. corpus is single companies four quarters of earnings call and within that for each quarter using TD-IDF top 100 words have been identified. TF-IDF assigns higher weights to words in one call than words common across all the calls. The underlying idea is to identify the ‘key topic words’ of each call that more unique in the call as opposed to words that are common across all the calls. WordCloud helps in highlighting these key words of the calls.

Let’s have a quick look at the word clouds of each of the companies one by one and try to identify change in topics & themes across various calls.

PS: I have combined single companies four quarters of WordCloud in a single image but I had looked into a ‘zoomed’ in version also.

Word Cloud Google

Google talks consistently about youtube and search (probably as expected) but we can see that in Q3–2019 they are talking about renewable energy, machine learning, launch of Google Discover also. These topics give away to cloud (GCP), advertisements and finally crisis (Covid) and pandemic.

Word Cloud Amazon

Amazon starts by talking about fire tv and this shifts to AWS, amazon prime. In Q4–2019, they refer to India possibly indicating some important changes like acquistion there. Again Covid crisis becomes a theme in first two quarters of 2020.

Word Cloud Facebook

For Facebook clearly advertisements, Instagram, WhatsApp are important focus areas. However, they talk about news publications, free expression, community impact also. Besides the pandemic they also refer to black (possibly black lives matter movement) and civil rights.

Word Cloud Microsoft

Microsoft seems to be the least impacted by the pandemic (minimal mention of it). While Azure/Cloud and gaming seemed to a big theme in 2019, after the crisis Microsoft Teams has become a big topic possibly emphasising their role in remote working environment.

After the WordCloud based theme identification, The next step was to use the “Loughran McDonald Sentiment Word Lists” classify the words in the transcripts into

  • Negative
  • Positive
  • Uncertainty
  • Litigious
  • Constraining

These sentiments are then charted in matplotlib to see the change across various calls. For example, if negative words frequency goes as 22 (in Q2–2019), 35 (in Q3–2019), 80(in Q1–2020), 40(in Q2–2020) then one clearly see the rise of negative sentiment in Q1–2020 (due to Covid pandemic) and subsequent fall of worries in Q2–2020.

Change in sentiment across different calls

One trend that is clearly visible is the big increase in the negative sentiment for all the companies in Q1–2020 and subsequent decrease in negative sentiment in Q2–2020. For Facebook the positive sentiment dropped the most and subsequently recovered, while for Amazon though the positive sentiment did not drop much but has dramatically increased in Q2–2020.

Finally, I have downloaded the stock prices using pandas data-reader with source as ‘yahoo’ and overlaid the sentiments in the earnings call and the related share price movement up to the next 30 days after the last call.

Quarterly call word sentiment overlaid with stock prices
Sentiment overlaid with share price (close)

The tech companies are going through a boom period. Except for the general big sell off in March (which also coincides with the drop in positive sentiment and increase in negative sentiment) the share prices of these companies have been on a roll. Just by looking at this small sample one may even say that share prices forerun the sentiment, though one should always remember (and especially here) “causation does not equal correlation”

What have been the top pain points of the project?

Like they say in every machine learning project the biggest thing is in cleaning the data. Though all the apis and examples of the apis are easily available on internet the process of finding the right words, bigrams in the document to create a sensible word cloud took quite a few iterations. The custom word list to exclude from processing (e.g. ‘business’, ‘customer’, ‘revenue’, ‘question’, ‘lady’, ‘gentleman’, etc.) took high time effort. In many ways it was often disappointing enough to almost give up but after a lot of tries I was able to create something that made more sense. This is often due to the fact that machines cannot understand similar words in this context for example cloud and Azure are same or similar in context for Microsoft but NLP does not know that and hence it identifies these two as two separate topics. Like this there are many other words which to humans hold same meaning but not so for the machines.

End Note

I hope you enjoyed this alternative style of analysing information and this can be done in real-time too if we want to take some quick action like use them in factor modelling in subsequent steps to determine the relative share price performance. The algorithm has quite a few places where it can further improved. If someone has a new idea to enhance this, I am happy to collaborate.

--

--

Anirudh @ krysins.com
The Startup

To use my passion for learning and problem-solving to create innovative solutions that improve productivity and share my learnings to help others.