Signal Expressions

Transform your data through powerful and extensible expressions (formulas)

Data transformations are essential when using data in the investment process, to clean, aggregate, align, and convert raw data to derive more meaningful insights. Exabel provides a powerful and extensible signal expression language (analogous to Excel formulas) to support a wide range of transforms for alternative data analysis. The most common expressions retrieve vendor data, and optionally apply one or more transformations such as summing over fiscal quarters, moving averages, leads/lags, and QoQ/YoY change. Such signal expressions are used in every part of the Exabel platform, from charts and dashboards to KPI analysis and modeling.

Exabel DSL (Domain-Specific Language)

Signal expressions are written in Exabel’s domain-specific language (DSL), which extends Python with a broad set of purpose-built functions for the financial domain. This is continuously being improved and extended with more functions based on customer demand. Additionally, users have the ability to fallback into Python and common data science libraries like pandas and numpy.

Examples

These examples show how common data transformations can be done through signal expressions:

Retrieving Visible Alpha consensus and revisions:

va_consensus('Total revenue')  
va_revisions('Total revenue', '4Q-2023')

Retrieving vendor card spend data:

# Loaded as the `card_spend` raw signal, in the `vendor` namespace
data('vendor.card_spend')

Calculating average transaction value by dividing spend by transactions:

data('vendor.card_spend') / data('vendor.card_transactions')

Applying a 28-day moving average and YoY change to the card spend data:

data('vendor.card_spend').moving_average(28).relative_change(years=1)

Summing the card spend data over company-specific fiscal quarters (“FQ”):

data('vendor.card_spend').resample('FQ', 'sum')

Retrieving app-level daily active users for the top 10 apps owned by a company:

# Retrieve the `daily_active_users` signal, which is loaded at `app` level
data('vendor.daily_active_users').for_type('vendor.app').top_n(10)

Signal expressions are designed to be generic - the examples above will work on any company for which data is available. This allows users to develop an expression once and apply it at scale across an entire sector or universe of companies. As such, everywhere a signal expression is used in Exabel, users have the option to also choose which companies (or entities) it should be used for. However, there are also “global” signals, such as FX rates, which always give the same result.

📘

Full Reference

Please see the full DSL reference documentation here, which documents all functions that you can use in your signal expressions.

Please reach out to [email protected] if you have any questions or need help!