FactSet Estimates - Actuals

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 - Actuals is a global dataset that provides insight into company actual reported values for a range of data items. The metrics covered by this dataset match the metrics covered by the FactSet Estimates - Consensus dataset. The Actuals dataset enhances your ability to analyze corporate metrics, compare quarterly or annual results, and calculate a surprise factor by leveraging pre-event Consensus Estimates.

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

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

Collection

The FactSet Estimates – Actuals dataset displays corporate fiscal period “actual” values based on two collection methods: Actuals and Broker Actuals. Primarily, the actual value is derived from the corporate press release, but in the case when no press release is available for a specific item, the Broker Actuals value is surfaced.

Importantly, Actuals are collected from press releases, they are not collected form 10K/10Q fillings. Consequently, restated Actuals are not collected.

Broker Actuals are calculated for the cases where there is no available press release or if the estimated item is not one of the regularly collected company actuals and there is no company guidance available for that item. The Broker Actual is the post event median consensus if a report date is collected from an earnings release. If the report date is calculated, then Broker Actual is the median pre and post event consensus. Broker Actuals will be continuously updated until 100 days past the event. Brokers may only contribute to the broker actual consensus one time in the 100 days. If a broker has already contributed a post event consensus they may only revise for up to 7 days post their initial contribution.

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 Estimates - Actuals data is collected and surfaced in a point-in-time fashion on Quantopian. This corresponds to when Quantopian started downloading and storing the data on a nightly basis. Timestamps for historical data prior to November 2018 are approximated by adding 24 hours to the report_date of each record.

Usage

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

Actuals can be used in many ways (most often in conjunction with consensus estimates). Here are a couple of example ideas that can be explored using Actuals:

  • Compute earnings "surprises" by comparing estimated values to actuals.
  • Compute per-sector or per-asset historical estimate accuracy by comparing surprise history to determine if certain sectors or assets are easier to estimate.

Import

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

Example

This example constructs and runs a pipeline that computes an earnings per share (EPS) 'surprise' factor. The surprise factor is defined to be the percent difference between the estimated EPS and the actual EPS from the most recently published quarterly report (fq0). Note that the example uses the ConsensusEstimates dataset with the Actuals dataset to construct the surprise factor. Run in the Research environment.

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

# Slice the PeriodicConensus and Actuals DataSetFamilies into DataSets. In this context,
# fq0_eps_cons is a DataSet containing consensus estimates data about EPS for the
# most recently reported fiscal quarter. fq0_eps_act is a DataSet containing the actual
# reported EPS for the most recently reported quarter.
fq0_eps_cons = fe.PeriodicConsensus.slice('EPS', 'qf', 0)
fq0_eps_act = fe.Actuals.slice('EPS', 'qf', 0)

# Get the latest mean consensus EPS estimate for the last reported quarter.
fq0_eps_cons_mean = fq0_eps_cons.mean.latest

# Get the EPS value from the last reported quarter.
fq0_eps_act_value = fq0_eps_act.actual_value.latest

# Define a surprise factor to be the relative difference between the estimated and
# reported EPS.
fq0_surprise = (fq0_eps_act_value - fq0_eps_cons_mean) / fq0_eps_cons_mean

# Add the surprise factor to the pipeline.
pipe = Pipeline(
        columns={
                'eps_surprise_factor': fq0_surprise,
        },
        domain=US_EQUITIES,
        screen=fq0_surprise.notnull(),
)

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

Pipeline Datasets & Columns

Dataset

Actuals - A pipeline DataSetFamily that provides access to actual reported metrics from company reports. In order to use Actuals data in a pipeline, it must first be sliced to generate a regular pipeline DataSet.

Slices

Actuals can be sliced along three dimensions: item, freq, and period_offset. The result of slicing Actuals 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 reported values of the given item. The full list of items is listed below in Table 1 (Report Items). Note that Actuals must be sliced using the item code, not the description.
  • freq - Slicing along this dimension selects for reported values 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 0, with 0 representing the fiscal period with the most recently published report and negative offsets representing periods further in the past. See the note below for an example.

Note

Calling Actuals.slice(item='EPS', freq='qf', period_offset=0) will create a dataset containing the EPS published in the most recent quarterly report, relative to the simulation date.

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

Fields

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

  • actual_value (dtype float64) - The company reported or broker actual value for the specified item, frequency, and offset.
  • actual_flag_code (dtype str) - A code denoting the type of actual value. '1' = company reported, '3' = broker actual.
  • period_label (dtype datetime64) - The end date of the fiscal period for which the actual is being reported.
  • publication_date (dtype datetime64) - The exact date that the results have been communicated to the market (US/Eastern datetime).
  • asof_date (dtype datetime64) - The date when the data actually impacted trading. Therefore the asof_date may be equal to or after the publication_date.
  • 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.
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.