FactSet Estimates - Consensus

The datasets described herein are proprietary to FactSet Research Systems, Inc. ("FactSet") and may not be copied or distributed. The datasets made available to Quantopian by FactSet are not exhaustive of FactSet's data, products, software, and/or services.

Copyright © 2019 FactSet Research Systems Inc. All rights reserved.

Overview

FactSet Estimates - Consensus is a global dataset that provides insights based on broker reports aggregated into a daily consensus estimate value. Estimates are collected and aggregated for a variety of metrics reported by publicly traded companies. The FactSet Estimates - Consensus dataset can be leveraged to analyze estimates made for both past and upcoming financial reports.

FactSet Consensus Estimates data is available via the Pipeline API, which means it can be accessed in Research and the IDE.

Background

Publicly traded companies issue quarterly, semi-annual, and annual financial reports. These reports provide investors with quantitative measures of a company's financial performance, including important metrics like Earnings per Share (EPS) and Cash Flow per Share (CFPS).

Investors want to know how companies might perform in the future, so they pay analysts to make estimates of companies' future performance. These estimates are usually tied to a particular fiscal quarter or year, allowing investors to compare estimates with the actual values reported by companies.

For large companies, there are usually many analysts making estimates at a given time for any given fiscal period. A common method for working with estimates data is to aggregate the estimates from individual analysts into a single consensus estimate. There are many ways to summarize per-analyst estimates into a consensus value, but commonly-computed statistics include mean, median, high, low, number of estimates, and standard deviation.

Earnings Surprise

Consensus earnings estimates are widely used in company valuation models. Consequently, when companies release earnings, stock prices tend to move based on company performance relative to analyst expectations. A company might post a good quarter in absolute terms, but their stock price might still go down if analysts expected an even better quarter. Similarly, a company's stock might go up after a bad quarter if analysts expected the quarter to be even worse. Thus, when an earnings report (i.e. an "actual") is released, investors are often interested in the difference between the reported value and the most recent estimate. This difference is often referred to as a "surprise" by industry practitioners. A positive surprise (i.e., an actual that was better than estimated) is often called an "earnings beat". A negative surprise is often called an "earnings miss".

Relative Period Notation

When working with estimates data in a simulation (e.g. in a backtest or a pipeline), we usually think about estimate periods relative to the current simulation perspective. A common notation for talking about relative periods is to use "FQ1" for "next-to-be-announced quarter", "FQ2" for "two quarters out", and "FQ0" for "most-recently-announced quarter". Similarly, "FY1" means "next-to-be-announced year", and "FY0" means "most-recently-announced year".

Note

Global data is available in Pipeline in Research. The IDE only has access to US equity data at this time.

Properties

  • Coverage: All supported countries on Quantopian
  • Data Frequency: Quarterly, semi-annual, or annual (depending on the field)
  • Update Frequency: Daily (updated overnight after each trading day)
  • Timespan: 2004 to present.
  • Point-In-Time Start: November 2018
  • Holdout: 1 year

Methodology

Consensus Window

By default, consensus estimates calculated by FactSet are based on estimates that have been validated via broker research within a trailing 100-day window. As of December 12th, 2014 FactSet Estimates methodology uses a variable window for a security’s unreported fiscal periods to dynamically extend the default 100 day window to the last actual fiscal Q3 report date, but no more than 150 days. This enhancement has been put in place due to a majority of securities reporting their fiscal Q4 later than 100 days after the fiscal Q3 report date. Using a variable window in these cases will ensure that broker contributions from the end of the fiscal Q3 do not get excluded due to a lag of report time.

Adjustments

On Quantopian, all FactSet Estimates items that are denominated in units per share are adjusted for corporate actions in a point-in-time fashion. This means that all per-share field are adjusted as of the simulation date of a pipeline or backtest run. This matches the method that Quantopian uses to adjust pricing data.

Point-In-Time

Starting in November 2018, FactSet Consensus Estimates data is collected and surfaced in a point-in-time fashion on Quantopian. This corresponds to when Quantopian started downloading and storing Consensus Estimates data on a nightly basis. Timestamps for historical data prior to November 2018 are approximated by adding 24 hours to the asof_date of each record.

Usage

Consensus estimates data is part of the quantopian.pipeline.data.factset.estimates module. Consensus estimates data is accessible via a pipeline DataSetFamily called PeriodicConsensus that can be sliced along three dimensions: freq, item, and period_offset. The result of slicing PeriodicConsensus is a pipeline DataSet.

Consensus estimates can be used in many ways. Here are a few examples that can be explored using consensus estimates:

  • Account for current analyst expectations of future earnings.
  • Examine how analyst projections of future earnings have changed over time.
  • Compute earnings "surprises" by comparing estimated values to actuals.

Import

from quantopian.pipeline.data.factset.estimates import PeriodicConsensus

Example

This example constructs and runs a pipeline that computes an 'estimated growth' factor. The estimated growth factor is derived from the most recent earnings per share (EPS) estimate for the upcoming two quarterly reports. Note that in this example, the most recent estimate each day is taken to be the most recent mean consensus estimate as of that day. Run in the Research environment.

from quantopian.pipeline import Pipeline
from quantopian.pipeline.data.factset.estimates import PeriodicConsensus
from quantopian.pipeline.domain import US_EQUITIES
from quantopian.research import run_pipeline

# Slice the PeriodicConensus DataSetFamily into two DataSets. In this context,
# fq1_eps_cons is a DataSet containing consensus estimates data about EPS for the
# upcoming fiscal quarter. fq2_eps_cons is a DataSet containing consensus estimates
# data about EPS two fiscal quarters into the future.
fq1_eps_cons = PeriodicConsensus.slice('EPS', 'qf', 1)
fq2_eps_cons = PeriodicConsensus.slice('EPS', 'qf', 2)

# Each fiscal calendar has BoundColumn attributes, just like other Pipeline
# DataSets. In this case, the 'mean' column is accessed to reference two timeseries
# representing the mean consensus EPS estimate for the next quarter out
# (fq1_eps_mean) and two quarters out (fq2_eps_mean). These are technically
# pipeline factors.
fq1_eps_mean = fq1_eps_cons.mean.latest
fq2_eps_mean = fq2_eps_cons.mean.latest

# The above pipeline factors are used to define an estimated_growth_factor. This
# factor looks at the relative difference each day between the mean EPS estimate
# for two quarters out and the mean EPS estimate for next quarter.
estimated_growth_factor = (fq2_eps_mean - fq1_eps_mean) / fq1_eps_mean

# Add the estimated_growth_factor as a column in the pipeline.
pipe = Pipeline(
    columns={
        'estimated_growth_factor': estimated_growth_factor,
    },
    domain=US_EQUITIES,
    screen=estimated_growth_factor.notnull(),
)

# Run the pipeline over a one year period and print the result.
df = run_pipeline(pipe, '2015-05-05', '2016-05-05')
print(df.head())

Pipeline Datasets & Columns

Dataset

PeriodicConsensus - A pipeline DataSetFamily that provides access to consensus estimate data. In order to use PeriodicConsensus data in a pipeline, it must first be sliced to generate a regular pipeline DataSet.

Slices

PeriodicConsensus can be sliced along three dimensions: item, freq, and period_offset. The result of slicing PeriodicConsensus is a pipeline DataSet. Note that slicing along all three dimensions is required in order to create a dataset.

  • item - Slicing along this dimension selects for estimates of the given item. The full list of items is listed below in Table 1 (Report Items). Note that PeriodicConsensus must be sliced using the item code, not the name.
  • freq - Slicing along this dimension selects for estimates at the given report freq. Valid frequecies are qf, af, and saf (quarterly, annual, and semi-annual frequency, respectively).
  • period_offset - Slicing along this dimension selects for values on reports from fiscal periods that are offset from the current simulation date by period_offset periods. The period_offset can range from -127 to 127, with positive values representing reports in the future and non-positive values (negative values and 0) representing fiscal periods that have already been reported. A period_offset of 0 represents the most recently reported fiscal period. See the note below for examples.

Note

Calling PeriodicConsensus.slice(item='EPS', freq='qf', period_offset=1) will create a DataSet containing estimates for EPS on the next quarterly report, relative to the current simulation date. PeriodicConsensus.slice(item='CAPEX', freq='af', period_offset=0) will create a DataSet containing estimates for the CAPEX that were made for the most recently published annual report, relative to the current simulation date.

Slicing a DataSetFamily creates a DataSet with fields accessible as BoundColumn attributes. The fields accessible in a DataSet sliced from PeriodicConsensus are listed below.

Fields

Each slice of PeriodicConsensus creates a pipeline DataSet with 10 fields (accessible as BoundColumn attributes):

  • mean (dtype float64) - The mean estimate value forecasted within FactSet’s consensus window for the specified slice.
  • median (dtype float64) - The median estimate value forecasted within FactSet’s consensus window for the specified slice.
  • low (dtype float64) - The lowest current estimate forecasted within FactSet’s consensus window for the specified slice.
  • high (dtype float64) - The highest current estimate forecasted within FactSet’s consensus window for the specified slice.
  • std_dev (dtype float64) - The measure of the dispersion (standard deviation) of estimates around the consensus value within FactSet’s consensus window for the specified slice.
  • up (dtype float64) - The number of estimates revised up within FactSet’s consensus window for the specified slice.
  • down (dtype float64) - The number of estimates revised down within FactSet’s consensus window for the specified slice.
  • num_est (dtype float64) - The number of estimates included in the consensus values, forecasted within FactSet’s consensus window for the specified slice.
  • period_label (dtype datetime64) - The date of the fiscal period end for which the consensus estimate is forecasting.
  • asof_date (dtype datetime64) - The earliest date the consensus value was effective.
  • timestamp (dtype datetime64) - The datetime when Quantopian learned about the data point from FactSet. For data prior to November 2018, the timestamp is equal to the asof_date + 24 hours.

Note

Refer to the example above to see how fields can be accessed in a pipeline.

Table 1: Report Items
Code Item Description
CFPS Cash Flow Per Share CFPS is the cash flow from operations divided by the number of shares. CFPS estimates are not provided for banking companies as FactSet Estimates does not consider this item reliable with regard to the activity of a banking company.
DPS Declared Dividend Per Share Dividends are the distributed portion of company’s earnings per share. It can be null (if no distribution is granted) or positive. A dividend cannot be negative. To enable reliable comparisons year to year, FactSet Estimates ignores exceptional dividends.
EPS Earnings Per Share EPS represents the diluted net income per common share, calculated as the company’s net income divided by the shares outstanding. EPS serves as an indicator of a company’s profitability. FactSet Estimates does not make adjustments to the EPS data provided by the analyst. As many methodologies exist, FactSet does collect and provide different EPS flavors detailed below. The majority methodology, i.e., what the market is expecting as a reference for the company’s numbers can be summed up by region. For European equities, EPS is adjusted for exceptional and any non-recurring items. For Asian equities, EPS is "as reported" (as per local GAAP standards). For US, Canada & South Africa, EPS methodology reflects the analysts’ and company’s standards ("Market EPS").
EPS_C Consolidated EPS Consolidated EPS represents the earnings per share for a given company or security merged with its affiliates. For more information on earnings per share, refer to the EPS item.
EPS_P Standalone Earnings Per Share Standalone EPS represents the earnings per share for a given company or security on a non-consolidated basis. For more information on earnings per share, refer to the EPS item.
SALES Sales Sales represent the revenue generated from customers. It shows the total of goods & services net sales, invoiced by a company during a particular fiscal period. The sales item collected by FactSet reflects the majority methodology followed by the Street. For most companies, it corresponds to net sales, but it can represent any of net sales, total revenue, gross or net premiums written (insurance companies), net premiums earned (also insurance companies), consolidated sales, or standalone sales.
SALES_C Consolidated Sales Sales for a given company or security merged with its affiliates.
SALES_P Standalone Sales Sales for a given company or security on a non-consolidated or parent basis.