Exercise 5.7. The goal of this project is to build a knowledge graph of headwinds and tailwinds facing a company as reported earnings calls transcripts. For this project, you can use any publicly available earnings calls transcripts. This project will give you hands-on experience with text processing, information extraction, and knowledge graph construction. Proceed in the following steps.
Select Companies and Time WindowFor the purpose of this exercise, we will use the earnings calls transcripts (ECTs) for Adobe. The primary reason for choosing Adobe is that it makes its ECTs available for free on its website. We downloaded Adobe ECTs for 10 quarters starting from the second quarter of 2024.Identify Financial Headwinds and TailwindsWe will approach this task in two steps. First, we will extract the financial headwinds and tailwinds from the ten quarters of earnings call transcripts. Next, we will situate the headwinds and tailwinds in a background taxonomy extracted from a finance textbook as part of Exercise 5.6, and to the extent possible, with domain-independent Wikidata relationships. We will explain each of these steps in greater detail.Extract Raw Headwinds and Tailwinds and CanonicalizeRecall that for each headwind and tailwind, we are interested in four properties: materiality (mild, medium, or high impact on company performance), duration (short, 1–2 quarters; medium, 3–5 quarters; long, more than 5 quarters), externality (true if outside the company's control, false if internal, both if mixed), and obviousness (how strongly an analyst would believe the effect is real and significant, based on strength of evidence rather than how emphatically management states it). We added a fifth dimension, scope considering Adobe's business-line structure — Creative Cloud, Document Cloud/Acrobat, Digital Experience, Firefly/GenAI, Adobe Express, Publishing & Advertising, or company-wide — because a single headwind rarely affects the whole business uniformly. Furthermore, Adobe moved reporting to the whole business level starting FY2026, which made this dimension more useful going forward rather than less. Each of the ten transcripts was read by an independent extraction pass powered by Claude, returning a JSON array in a fixed schema: quarter, raw label, scope, direction (headwind or tailwind), the four scored dimensions, a verbatim quote, the speaker and their role, the section of the call (prepared remarks or Q&A), and a short rationale explaining the score. This produced 161 raw mentions across the ten quarters. The 161 raw mentions were grouped into 27 canonical concepts, again using Claude, using a keyword-matching rule set — for example, every mention of FX/currency translation effects across all ten quarters collapsed into one concept, as did every mention of Firefly and GenAI monetization. The resulting concepts range from ones present in every quarter (FX effects, Firefly/GenAI monetization, GenStudio/AEP growth) down to single-quarter, one-off events (the Figma termination payment, the Semrush acquisition, a CFO transition). Across the ten quarters covered, Adobe's Tailwinds substantially outnumber headwinds in the raw count — 112 tailwind mentions versus 49 headwind mentions — though that ratio partly reflects how much airtime management gives to framing AI monetization positively, rather than a claim that the business faced few real pressures. Three themes appear in every single quarter of the dataset: foreign exchange translation effects, Firefly/GenAI monetization and ARR growth, and GenStudio/AEP enterprise AI-driven growth. Their persistence says less about any one quarter and more about the fact that currency exposure and AI monetization have been the two throughlines of Adobe's narrative for two straight years. What the quarter-by-quarter view adds that a single snapshot can't is that several of these themes are not static labels — they change character over time, sometimes dramatically. Two examples illustrate two different ways that happens. Foreign exchange effects flipped direction cleanly, in step with the dollar. From FY2024 Q1 through FY2025 Q1, FX was called out as a headwind in every quarter — a strengthening U.S. dollar was consistently cited as shaving a point or so off reported growth relative to constant currency. Starting in FY2025 Q2, the same underlying factor reversed into a tailwind for five consecutive quarters through FY2026 Q2, as the dollar weakened and currency translation began adding to reported growth instead. It's the same economic exposure the whole way through — only the sign of the year-over-year currency move changed, not the nature of the risk itself. Creative Cloud pricing and packaging, by contrast, has toggled back and forth rather than trending in one direction. It opened as a headwind in FY2024 Q1 and Q2 (tough prior-year pricing comparisons), swung to a tailwind for the next two quarters as renewal upsell and consumption-based pricing kicked in, dipped back to a mild headwind in FY2025 Q2 (slower realization through annual renewal cycles), returned to a tailwind through Q3 and Q4 as value-based pricing and Pro-tier migration contributed to ARR, and then picked up a second, different headwind in that same FY2025 Q4 quarter — growing competitive pressure on pricing power. Unlike FX, this isn't one factor reversing sign; it's several distinct pricing dynamics layered under one label, which is worth keeping in mind when reading "pricing" as a single line in any summary table. Situate the Headwinds/Tailwinds in a Finance TaxonomyA natural next question is whether these 27 company-specific concepts could be given more general meaning by connecting them to an existing body of finance knowledge, rather than remaining a self-contained, Adobe-only vocabulary. Recall from Exercise 5.6, we have already created a finance taxonomy from OpenStax Principles of Finance textbook, with roughly 180 genus classes, a glossary of about 425 terms each with a genus and differentia, and a mapping of the vocabulary used to describe relationships between concepts onto specific Wikidata properties. The finance textbook taxonomy has two classes that are directly relevant to headwinds and tailwinds: risk and income/return. A spot check suggested that the company-specific concepts could be categorized under these two classes. For example, the concept of macroeconomic uncertainty & cyclicality naturally fits under risk and the concept of enterprise large deal bookings falls under income. There was, however, one excpetion: a strategic trade-off concept (Adobe's freemium/MAU strategy, which dampens near-term revenue in exchange for long-term reach) that fits neither the risk branch nor the income branch. We can specify this task as starting from the 27 Adobe headwind/tailwind concepts and identifying a genus (an existing taxonomy class, or a new one only when nothing fit) and a differentia, where the differentia's relationship predicate would be reused from the textbook's own Wikidata-aligned vocabulary rather than invented freely, and only the differentia's specific content — the Adobe-specific condition — would be newly written. We used Claude to generate the necessary Python script that we ran locally with a Gemini API key, structuered as follows. It first reads the textbook taxonomy, asks Gemini to choose a genus from a curated shortlist and write a differentia using only predicates from the textbook's causal-relationship vocabulary, and finally writes out the taxonomy. The one concept with no genus home (the freemium trade-off) was resolved by creating a new class strategic_tradeoff. The end result is a taxonomy in which Adobe's real headwinds and tailwinds, in quarter-by-quarter disclosures, are grounded in formal financial vocabulary rather than existing as an unconnected list — each concept now has a place in a class hierarchy, alongside textbook concepts like economic risk, diversifiable risk, and total return. Analysis of the ResultWe analyze below the benefits of connecting the headwinds/tailwinds extracted from the earnings calls transcripts with a taxonomy extracted from the textbook. A raw extraction assigns strings such as "Macro/FX", "AI & Product Innovation", to the headwinds/tailwinds. Grouping by formal genus, we can now ask "which Adobe concepts are structurally under risk, and which under income?" via the real subclass hierarchy, and get a classification that comes from the textbook's own logic rather than LLM prediction. We can use the resulting data to perform blind spot analysis as follows. Take everything the textbook defines under risk, subtract the specific genus classes Adobe's own concepts actually landed on, and what's left is risk vocabulary the textbook considers material to a business but that never came up on a call - liquidity_risk, reinvestment_risk, political_risk, whatever the diff turns out to be. That's a concrete, non-obvious prompt list for an analyst's next earnings-call question, and it wasn't answerable at all before the mapping existed (there was nothing to diff against). We can use the taxonomy to calculate relatedness between two Adobe concepts via shared ancestry. Before, "how related are Firefly monetization and AI infrastructure cost pressure was answerable only by eyeballing category strings (or through another LLM call). Now both are embedded in the same graph, so their least-common-ancestor distance is a real, computable answer - close (few hops, e.g. both under a shared cost/investment branch) vs. distant (only converge at root concept). Cross company comparisons can be done more effectively. if we run the same pipeline against another company's earnings calls, their concepts would land in the same shared taxonomy. At that point we could ask "which companies have concepts under economic_risk" or "whose growth concepts cluster near total_return vs. near strategic_tradeoff". We can do cross-company comparison by structural genus membership instead of keyword overlap on transcripts. |