Producer price inflation #
This category group contains realtime information states of output price growth in the economy. In particular, it contains the following important concepts:

Realtime measures of internationally comparable GDP price deflators based on vintages which are either taken from national sources or by JPMaQS.

Estimated economywide output price growth based on standard econometric (“technical”) estimates that use GDP deflators as target but deploy higherfrequency price information. Historic and current models are based on the simplest conventions and are recurrently reconstructed based on learning (view basic principles here )

Realtime measures of standard producer price (PPI) index trends of selected sectors in accordance with local convention (typically focused on industry), based on sequential estimation of seasonal factors and/or original data vintages.
GDP deflator trends #
Ticker : PGDP_SA_P1Q1QL4 / _P1Q1QL1AR / _P2Q2QL2AR
Label : GDP price deflator, sa: %oya (quarterly) / % q/q ar / % 2q/2q ar
Definition : GDP price deflator, seasonallyadjusted: % over a year ago (quarterly) / % quarter over previous quarter, annualized / % 2 quarters over previous 2 quarters, annualized
Notes :

“ The GDP implied deflator is used to measure changes in the overall level of prices for the goods and services that make up GDP. It is an important indicator in the National Accounts as it distinguishes output growth that comes about due to volume increase and that due to price changes.” [ Chowdhury ]

For the following countries deflator vintages are directly taken from official national sources: Australia, Canada, the euro area, Germany, Japan, Malaysia, New Zealand, Spain, Switzerland, the UK, and the U.S.

For the remaining currency areas and countries, we calculate the price deflators indirectly, as the ratio of nominal GDP to real GDP. In this case the data are not seasonally adjusted and JPMaQS applies sequential seasonal adjustment based on the standard X13 method.
Economywide estimated output price trends and changes (broad) #
Ticker : PGDPTECH_SA_P1M1ML12 / _P1M1ML12_3MMA / _P1M1ML12_D3M3ML3
Label : Economywide output prices, GDPbased broad estimate: % oya / % oya, 3mma / % oya, 3mma, diff over 3m
Definition : Economywide output prices, GDPbased broad estimate: % over a year ago / % over a year ago, 3month moving average / % over a year ago, 3month moving average, difference versus 3 months ago
Notes :

Output price trends for the overall economy resemble GDP deflators in principle but are estimated at a monthly frequency with a simple nowcasting method and based on a limited early set of price indicators. They are a much rougher indicator of overall output price growth than deflators but are transparent and very timely. They are related to corporate profitability and conceptually different from consumer price indicators, which focus on households living costs, and standard producer prices, which are typically collected only for the manufacturing sector alone.

Formally price trends are estimated as nowcasters of annual growth rates of GDP deflation, based on early indicators such as CPI, PPI, oil prices in local currency and so forth. The presence of predictive power is ascertained by using the “elastic net” regression method. A more detailed explanation can be found in Appendix 1 . A full list of inputs for each cross section for each country is provided in Appendix 2 .

Important note: The quantamental series of a 3month moving average, as presented here, is not the same as the 3month moving average of a quantamental series. Instead it is a 3month moving average of the concurrent available vintage. Since the latest month and the previous months may be estimated based on different monthlyfrequency data, depending on publication lag, the quantamental 3month moving averages contain independent information and may look very different from the smoothed monthly quantamental series. The same applies to change of output price trends: quantamental indicators of changes are not the same as changes in quantamental indicators.
Economywide estimated output price trends and changes (narrow) #
Ticker : PGDPTECHX_SA_P1M1ML12 / PGDPTECHX_SA_P1M1ML12_3MMA / _P1M1ML12_D3M3ML3
Label : Economywide output prices, GDPbased narrow estimate: % oya / % oya, 3mma / % oya, 3mma, diff over 3m
Definition : Economywide output prices, GDPbased narrow estimate: % over a year ago / % over a year ago, 3month moving average / % over a year ago, 3month moving average, difference versus 3 months ago
Notes :

These indicators are similar to the broad outprice trends, except that they uses a more narrow and conservative highfrequency predictors, mainly consumer and producer price indices, which also be seen in Appendix 2 .

These indicators cannot be calculated for Australia and New Zealand, since the national statistical agencies do not publish monthly CPI or PPI data.
Standard PPI inflation #
Ticker : PPIH_NSA_P1M1ML12 / _P1M1ML12_3MMA
Label : Main producer price index: %oya / %oya, 3mma
Definition : Main producer price index: % over a year ago / % over a year ago, 3month moving average
Notes :

In general, the PPIs used for this category are the most commonly watched local measures. Definitions are not equal across currency areas. In some countries, prices refer only to manufacturing output. In others, they include construction, mining and utilities. Some also include agriculture and services. See the countryspecific notes in Appendix 1 .

India and Taiwan do not report PPI and instead the wholesale price index has been used.

Most underlying vintages have a monthly frequency. Australia, New Zealand and Indonesia only publish quarterly production price indices. For trend growth calculations, these indices are assumed to be stable over the quarter.

USA changed how it calculated PPI from the processing stage to the final intermediate demand. The final demand version is used from January 2016 onwards.

Hungary only reported manufacturing prices until 2010.

South Africa only reported manufacturing prices until 2012.

For Brazil, WPI was used in calculations until 2019.
Seasonallyadjusted PPI trends #
Ticker : PPIH_SA_P3M3ML3AR / _P6M6ML6AR
Label : Adjusted PPI trend: % 3m/3m ar / % 6m/6m ar
Definition : Headline PPI, seasonallyadjusted: % of latest 3 months over previous three months at annualized rate / % of latest six months over previous 6 months at an annualized rate.
Notes :

See the important notes in the section above on “Annual PPI inflation”.

Seasonal adjustment factors are sequentially reestimated as new data are being released. Every reestimation gives rise to a new data vintage which is the basis of concurrent trend estimation.

China does not publish a proper PPI index. The official statistics only display a % over a year ago series. This means that shortterm production price trends cannot be calculated.
Imports #
Only the standard Python data science packages and the specialized
macrosynergy
package are needed.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import math
import os
import json
import yaml
import macrosynergy.management as msm
import macrosynergy.panel as msp
import macrosynergy.signal as mss
import macrosynergy.pnl as msn
from macrosynergy.download import JPMaQSDownload
from timeit import default_timer as timer
from datetime import timedelta, date, datetime
import requests
import warnings
warnings.simplefilter("ignore")
The
JPMaQS
indicators we consider are downloaded using the J.P. Morgan Dataquery API interface within the
macrosynergy
package. This is done by specifying
ticker strings
, formed by appending an indicator category code
<category>
to a currency area code
<cross_section>
. These constitute the main part of a full quantamental indicator ticker, taking the form
DB(JPMAQS,<cross_section>_<category>,<info>)
, where
<info>
denotes the time series of information for the given crosssection and category. The following types of information are available:

value
giving the latest available values for the indicator 
eop_lag
referring to days elapsed since the end of the observation period 
mop_lag
referring to the number of days elapsed since the mean observation period 
grade
denoting a grade of the observation, giving a metric of real time information quality.
After instantiating the
JPMaQSDownload
class within the
macrosynergy.download
module, one can use the
download(tickers,start_date,metrics)
method to easily download the necessary data, where
tickers
is an array of ticker strings,
start_date
is the first collection date to be considered and
metrics
is an array comprising the times series information to be downloaded.
# Crosssections of interest
cids_dmca = [
"AUD",
"CAD",
"CHF",
"EUR",
"GBP",
"JPY",
"NOK",
"NZD",
"SEK",
"USD",
] # DM currency areas
cids_dmec = ["DEM", "ESP", "FRF", "ITL", "NLG"] # DM euro area countries
cids_latm = ["BRL", "COP", "CLP", "MXN", "PEN"] # Latam countries
cids_emea = ["CZK", "HUF", "ILS", "PLN", "RON", "RUB", "TRY", "ZAR"] # EMEA countries
cids_emas = [
"CNY",
# "HKD",
"IDR",
"INR",
"KRW",
"MYR",
"PHP",
"SGD",
"THB",
"TWD",
] # EM Asia countries
cids_dm = cids_dmca + cids_dmec
cids_em = cids_latm + cids_emea + cids_emas
cids = sorted(cids_dm + cids_em)
# for FX
cids_nofx = ["EUR", "USD", "SGD"] + cids_dmec
cids_fx = list(set(cids)  set(cids_nofx))
cids_eur = ["CHF", "CZK", "HUF", "NOK", "PLN", "RON", "SEK"] # trading against EUR
cids_eud = ["GBP", "RUB", "TRY"] # trading against EUR and USD
cids_usd = list(set(cids_fx)  set(cids_eur + cids_eud)) # trading against USD
# Quantamental categories of interest
main = [
"PGDP_SA_P1Q1QL4",
"PGDP_SA_P1Q1QL1AR",
"PGDP_SA_P2Q2QL2AR",
"PGDPTECH_SA_P1M1ML12_3MMA",
"PGDPTECH_SA_P1M1ML12",
"PGDPTECH_SA_P1M1ML12_D3M3ML3",
"PGDPTECHX_SA_P1M1ML12_3MMA",
"PGDPTECHX_SA_P1M1ML12",
"PGDPTECHX_SA_P1M1ML12_D3M3ML3",
"PPIH_NSA_P1M1ML12",
"PPIH_NSA_P1M1ML12_3MMA",
"PPIH_SA_P3M3ML3AR",
"PPIH_SA_P6M6ML6AR",
]
econ = ["CPIH_SA_P1M1ML12", "INFTEFF_NSA"] # economic context
mark = [
"FXXR_NSA",
"FXXR_VT10",
"EQXR_NSA",
"DU05YXR_NSA",
"DU02YXR_NSA",
"FXTARGETED_NSA",
"FXUNTRADABLE_NSA",
] # market links
xcats = main + econ + mark
# Download series from J.P. Morgan DataQuery by tickers
start_date = "19900101"
tickers = [cid + "_" + xcat for cid in cids for xcat in xcats]
print(f"Maximum number of tickers is {len(tickers)}")
# Retrieve credentials
client_id: str = os.getenv("DQ_CLIENT_ID")
client_secret: str = os.getenv("DQ_CLIENT_SECRET")
# Download from DataQuery
with JPMaQSDownload(client_id=client_id, client_secret=client_secret) as downloader:
start = timer()
assert downloader.check_connection()
df = downloader.download(
tickers=tickers,
start_date=start_date,
metrics=["value", "eop_lag", "mop_lag", "grading"],
suppress_warning=True,
show_progress=True,
)
end = timer()
dfd = df
print("Download time from DQ: " + str(timedelta(seconds=end  start)))
Maximum number of tickers is 814
Downloading data from JPMaQS.
Timestamp UTC: 20240109 16:06:23
Connection successful!
Number of expressions requested: 3256
Requesting data: 100%████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ 163/163 [00:57<00:00, 2.81it/s]
Downloading data: 100%███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ 163/163 [00:49<00:00, 3.26it/s]
Download time from DQ: 0:03:43.823323
Availability #
cids_exp = cids # cids expected in category panels
msm.missing_in_df(dfd, xcats=xcats, cids=cids_exp)
Missing xcats across df: []
Missing cids for CPIH_SA_P1M1ML12: []
Missing cids for DU02YXR_NSA: ['RON', 'DEM', 'PHP', 'ITL', 'FRF', 'BRL', 'PEN', 'NLG', 'ESP']
Missing cids for DU05YXR_NSA: ['RON', 'DEM', 'PHP', 'ITL', 'FRF', 'BRL', 'PEN', 'NLG', 'ESP']
Missing cids for EQXR_NSA: ['COP', 'ILS', 'NZD', 'RON', 'RUB', 'IDR', 'PHP', 'CLP', 'HUF', 'NOK', 'PEN', 'CZK']
Missing cids for FXTARGETED_NSA: ['DEM', 'USD', 'ITL', 'FRF', 'NLG', 'ESP']
Missing cids for FXUNTRADABLE_NSA: ['DEM', 'USD', 'ITL', 'FRF', 'NLG', 'ESP']
Missing cids for FXXR_NSA: ['DEM', 'USD', 'ITL', 'FRF', 'NLG', 'ESP']
Missing cids for FXXR_VT10: ['DEM', 'USD', 'ITL', 'FRF', 'NLG', 'ESP']
Missing cids for INFTEFF_NSA: ['DEM', 'ITL', 'FRF', 'NLG', 'ESP']
Missing cids for PGDPTECHX_SA_P1M1ML12: ['AUD', 'NZD']
Missing cids for PGDPTECHX_SA_P1M1ML12_3MMA: ['AUD', 'NZD']
Missing cids for PGDPTECHX_SA_P1M1ML12_D3M3ML3: ['AUD', 'NZD']
Missing cids for PGDPTECH_SA_P1M1ML12: []
Missing cids for PGDPTECH_SA_P1M1ML12_3MMA: []
Missing cids for PGDPTECH_SA_P1M1ML12_D3M3ML3: []
Missing cids for PGDP_SA_P1Q1QL1AR: []
Missing cids for PGDP_SA_P1Q1QL4: []
Missing cids for PGDP_SA_P2Q2QL2AR: []
Missing cids for PPIH_NSA_P1M1ML12: []
Missing cids for PPIH_NSA_P1M1ML12_3MMA: []
Missing cids for PPIH_SA_P3M3ML3AR: ['CNY']
Missing cids for PPIH_SA_P6M6ML6AR: ['CNY']
xcatx = xcats
cidx = cids_exp
dfx = msm.reduce_df(dfd, xcats=main, cids=cidx)
dfs = msm.check_startyears(
dfx,
)
msm.visual_paneldates(dfs, size=(20, 5))
print("Last updated:", date.today())
Last updated: 20240109
xcatx = main
cidx = cids_exp
plot = msm.check_availability(
dfd, xcats=xcatx, cids=cidx, start_size=(12, 4), start_years=False
)
xcatx = main
cidx = cids_exp
plot = msp.heatmap_grades(
dfd,
xcats=xcatx,
cids=cidx,
size=(12, 4),
title=f"Average vintage grades from {start_date} onwards",
)
Standard PPI inflation data have the shortest observation period lags, following by economywide estimated output price trends. The GDP deflatos lake longest to release.
xcatx = ["PGDPTECH_SA_P1M1ML12_3MMA", "PGDP_SA_P1Q1QL4", "PPIH_NSA_P1M1ML12"]
cidx = cids_exp
msp.view_ranges(
dfd,
xcats=xcatx,
cids=cidx,
val="eop_lag",
title="End of observation period lags (ranges of time elapsed since end of observation period in days)",
start=start_date,
kind="box",
size=(16, 7),
)
History #
GDP price deflators inflation #
Averages and variation of GDP deflators have been very different across countries. Quarterly deflator changes are very volatile for most countries. The annual growth rates and the 2quarter growth rates have empirically been more plausible indicators of trends.
xcatx = ["PGDP_SA_P1Q1QL4", "PGDP_SA_P1Q1QL1AR","PGDP_SA_P2Q2QL2AR"]
cidx = cids_exp
msp.view_ranges(
dfd,
xcats=xcatx,
cids=cidx,
sort_cids_by="mean",
start="20000101",
title="Means and standard deviations of GDP price deflators inflation, since 2000",
kind="bar",
size=(16, 8),
)
Some countries such as Great Britain and China can have highly volatile GDP price deflator, which can be explained by methodology changes. For example, in the UK during the height of COVID , the Office for National Statistics reduced public sector output based on physical indicators, such as inperson classes taught. Since at the same time costs for such services remained stable the inputted deflator surged. which affected the GDP deflator during the covid disruption. China has historically used undisclosed methods for their real growth rate and there have been implausible patterns in their data. There is evidence to suggest that China overstates real GDP growth in downturns, as there has been a pattern of decreasing price growth rather than production growth.
xcatx = ["PGDP_SA_P1Q1QL4","PGDP_SA_P2Q2QL2AR"]
cidx = cids_exp
msp.view_timelines(
dfd,
xcats=xcatx,
cids=cidx,
start="20000101",
title="GDP deflator trends",
# label_adj=0.05,
title_fontsize=27,
legend_fontsize=17,
title_adj=1.02,
title_xadj=0.42,
ncol=4,
same_y=False,
size=(12, 7),
aspect=1.7,
all_xticks=True,
)
GDP price deflators have generally not been strongly correlated across countries. Clusters of strong correlation can be found, however, among European economies and other specific country pairs. Japan’s and Taiwan’s deflator trends have been negatively correlated with many EM countries.
xcatx = ["PGDP_SA_P1Q1QL4"]
cidx = cids_exp
msp.correl_matrix(
dfd,
xcats=xcatx,
cids=cidx,
size=(20, 14),
title="Crosssectional correlations of annual GDP price deflators inflation since 1990",
cluster=True,
)
Economy output price trends #
Even though broad economic output price trends are derived as types of nowcasters on GDP deflators, their information states can deviate substantially and over long periods of time. This reflects two important differences:

The economy price trends are much timelier and only use a small set of timely available indicators. Other sources of price fluctuations and trends, such as imputed public sector output prices, are not considered.

Economy output trends only use higherfrequency price indicators only to the extent that they have historically been successful in estimating the GDP deflator. The predictive power of even the full set of indicators can sometimes be low, in which case the realtime estimator is very conservative and close to a longerterm term GDP deflator growth average.
Deflator nowcasters can deviate from their targets a lot more persistently than GDP nowcasters because there are less explanatory high frequency series. After all deflators are only of interest for specialized purposes, while real GDP is a mainstream piece of information with great relevance for politics and economic and monetary policy.
xcatx=["PGDPTECH_SA_P1M1ML12_3MMA", "PGDP_SA_P1Q1QL4"]
cidx = cids_exp
msp.view_timelines(
dfd,
xcats=xcatx,
cids=cidx,
start="20000101",
title="Broad output prices (blue) and GDP deflator (orange) growth, %oya, 3mma or quarterly",
# label_adj=0.05,
title_fontsize=27,
legend_fontsize=17,
title_adj=1.02,
title_xadj=0.42,
ncol=4,
same_y=False,
size=(12, 7),
aspect=1.7,
all_xticks=True,
)
The narrow version of the economy’s estimated output price trend can produce very different shortterm dynamics. It is no less volatile than the broad metric, however.
xcatx = ["PGDPTECHX_SA_P1M1ML12_3MMA","PGDPTECH_SA_P1M1ML12_3MMA",]
cidx = cids_exp
msp.view_timelines(
dfd,
xcats=xcatx,
cids=cidx,
start="20000101",
title="Narrow (blue) and broad (orange) economywide outout price growth, %oya, 3mma",
title_fontsize=27,
legend_fontsize=17,
title_adj=1.02,
title_xadj=0.42,
ncol=4,
same_y=False,
size=(12, 7),
aspect=1.7,
all_xticks=True,
)
Changes of the economy’s output price trends #
Shortterm changes in estimated output price trends in the economy are strongly mean reverting with many “minicycles”. Differences between narrow (conservative) and broad estimates can be large.
xcatx = ["PGDPTECHX_SA_P1M1ML12_D3M3ML3", "PGDPTECH_SA_P1M1ML12_D3M3ML3",]
cidx = cids_exp
msp.view_timelines(
dfd,
xcats=xcatx,
cids=cidx,
start="20000101",
title="Changes in estimated output price trends in the economy",
# label_adj=0.05,
title_fontsize=27,
legend_fontsize=17,
title_adj=1.02,
title_xadj=0.42,
ncol=4,
same_y=False,
size=(12, 7),
aspect=1.7,
all_xticks=True,
)
Annual PPI inflation #
Average rates and standard deviations of PPI inflation have been diverse across countries, with exchange rates being a key differentiating factor. Longterm average inflation has ranged from nearzero in Switzerland to near 20% in Turkey.
xcatx = ["PPIH_NSA_P1M1ML12", "PPIH_NSA_P1M1ML12_3MMA"]
cidx = cids_exp
msp.view_ranges(
dfd,
xcats=xcatx,
cids=cidx,
sort_cids_by="mean",
start="20000101",
title="Means and standard deviations of annual PPI inflation",
xcat_labels=["%oya", "%oya, 3mma"],
kind="bar",
size=(16, 8),
)
xcatx = ["PPIH_NSA_P1M1ML12", "PPIH_NSA_P1M1ML12_3MMA"]
cidx = cids_exp
msp.view_timelines(
dfd,
xcats=xcatx,
cids=cidx,
start="20000101",
title="Headline PPI inflation and three month moving average",
title_fontsize=27,
legend_fontsize=17,
title_adj=1.02,
title_xadj=0.42,
ncol=4,
same_y=False,
size=(12, 7),
aspect=1.7,
all_xticks=True,
)
Quantamental series of PPI inflation rates are positively correlated across almost all country pairs and often strongly so. This mainly reflects the impact of various raw materials on PPI dynamics.
msp.correl_matrix(dfd, xcats="PPIH_NSA_P1M1ML12", cids=cids_exp, size=(20, 14))
Seasonallyadjusted PPI trend #
The 6monthsover6months trends have been a lot more stable than the 3monthsover3months trends and seem to be a useful basis for measuring shorterterm producer price inflation trend differentials across countries.
xcatx = ["PPIH_SA_P3M3ML3AR", "PPIH_SA_P6M6ML6AR"]
cidx = cids_exp
msp.view_ranges(
dfd,
xcats=xcatx,
cids=cidx,
sort_cids_by="mean",
start="20000101",
title="Means and standard deviations of seasonallyadjusted PPI trends",
xcat_labels=["3month/3month trend", "6month/6month trend"],
kind="bar",
size=(16, 8),
)
xcatx = ["PPIH_SA_P3M3ML3AR", "PPIH_SA_P6M6ML6AR"]
cidx = cids_exp
msp.view_timelines(
dfd,
xcats=xcatx,
cids=cidx,
start="20000101",
xcat_labels=[
"% 3m/3m, seasonallyadjusted annualized rate",
"% 6m/6m, seasonallyadjusted annualized rate",
],
title="Seasonally adjusted trends of headline PPI",
title_fontsize=27,
legend_fontsize=17,
label_adj=0.075,
title_adj=1.02,
title_xadj=0.4,
ncol=4,
same_y=False,
size=(12, 7),
aspect=1.7,
all_xticks=True,
)
Importance #
Research links #
“Nowcasting economic trends can make use of a broad range of machine learning methods. This not only serves the purpose of optimization but also allows replication of past information states of the market and supports realistic backtesting. A practical framework for modern nowcasting is the threestep approach of (1) variable preselection, (2) orthogonalized factor formation, and (3) regressionbased prediction.” Macrosynergy
Empirical clues #
calcs = ["XPGDPTECH_SA_P1M1ML12 = PGDPTECH_SA_P1M1ML12  INFTEFF_NSA ",
"XPGDPTECHX_SA_P1M1ML12 = PGDPTECHX_SA_P1M1ML12  INFTEFF_NSA ",]
dfa = msp.panel_calculator(dfd, calcs=calcs, cids=cids)
dfd = msm.update_df(dfd, dfa)
dfb = dfd[dfd["xcat"].isin(["FXTARGETED_NSA", "FXUNTRADABLE_NSA"])].loc[
:, ["cid", "xcat", "real_date", "value"]
]
dfba = (
dfb.groupby(["cid", "real_date"])
.aggregate(value=pd.NamedAgg(column="value", aggfunc="max"))
.reset_index()
)
dfba["xcat"] = "FXBLACK"
fxblack = msp.make_blacklist(dfba, "FXBLACK")
xcatx = [
"XPGDPTECHX_SA_P1M1ML12",
"XPGDPTECH_SA_P1M1ML12",
"PGDPTECHX_SA_P1M1ML12",
"PGDPTECH_SA_P1M1ML12",
]
for xc in xcatx:
calc_eur = [f"{xc}vBM = {xc}  iEUR_{xc}"]
calc_usd = [f"{xc}vBM = {xc}  iUSD_{xc}"]
calc_eud = [f"{xc}vBM = {xc}  0.5 * ( iEUR_{xc} + iUSD_{xc} )"]
dfa_eur = msp.panel_calculator(dfd, calcs=calc_eur, cids=cids_eur)
dfa_usd = msp.panel_calculator(dfd, calcs=calc_usd, cids=cids_usd)
dfa_eud = msp.panel_calculator(dfd, calcs=calc_eud, cids=cids_eud)
dfa = pd.concat([dfa_eur, dfa_usd, dfa_eud])
dfd = msm.update_df(dfd, dfa)
Relative output price growth trends across countries are plausible predictors of FX return trends. That is because they indicate improving termsoftrade and a greater bias towards monetary tightening. A country whose production prices grow faster than in the U.S. or the euro area has a better chance to experience currency appreciation against either of these two benchmarks.
Empirically, i.e., since 2000 and for 29 DM and EM currency areas, output price trend differentials have been positively correlated with subsequent returns both at a monthly and quarterly frequency. For both broad and narrow output price trends this relationship has been highly significant.
xcatx = ["PGDPTECH_SA_P1M1ML12vBM", "FXXR_VT10"]
cidx = cids
cr_crr = msp.CategoryRelations(
dfd,
xcats=xcatx,
cids=cidx,
freq="Q",
lag=1,
xcat_aggs=["last", "sum"],
start="20000101",
blacklist=fxblack,
)
cr_crr.reg_scatter(
title="Estimated output price differentials and subsequent FX forward returns, 29 countries since 2000",
labels=False,
coef_box="lower left",
xlab="Estimated broad output price growth of the economy, %oya, versus benchmark (USD or EUR)",
ylab="FX forward return, targeted to 10% ar vol, versus benchmark (USD or EUR), next quarter",
prob_est="map"
)
PGDPTECH_SA_P1M1ML12vBM misses: ['DEM', 'ESP', 'EUR', 'FRF', 'ITL', 'NLG', 'SGD', 'USD'].
FXXR_VT10 misses: ['DEM', 'ESP', 'FRF', 'ITL', 'NLG', 'USD'].
xcatx = ["PGDPTECHX_SA_P1M1ML12vBM", "FXXR_VT10"]
cidx = cids
cr_crr = msp.CategoryRelations(
dfd,
xcats=xcatx,
cids=cidx,
freq="Q",
lag=1,
xcat_aggs=["last", "sum"],
start="20000101",
blacklist=fxblack,
)
cr_crr.reg_scatter(
title="Narrow output price differentials and subsequent FX forward returns, 29 countries since 2000",
labels=False,
coef_box="lower left",
xlab="Estimated narrow output price growth of the economy, %oya, versus benchmark (USD or EUR)",
ylab="FX forward return, targeted to 10% ar vol, versus benchmark (USD or EUR), next quarter",
prob_est="map"
)
PGDPTECHX_SA_P1M1ML12vBM misses: ['AUD', 'DEM', 'ESP', 'EUR', 'FRF', 'ITL', 'NLG', 'NZD', 'SGD', 'USD'].
FXXR_VT10 misses: ['DEM', 'ESP', 'FRF', 'ITL', 'NLG', 'USD'].
Quantamental data of PPI inflation have been negatively related to subsequent swap returns across the major tenors.
xcatx = ["PPIH_SA_P6M6ML6AR", "DU02YXR_NSA"]
cidx = list(
set(cids_exp)
 set(["BRL", "CNY", "DEM", "ESP", "FRF", "ITL", "NLG", "PEN", "PHP", "RON"])
) # missing cids
cr = msp.CategoryRelations(
dfd,
xcats=xcatx,
cids=cidx,
freq="M",
lag=1,
fwin=1,
xcat_aggs=["last", "sum"],
xcat_trims=[100, 10],
start="20000101",
years=None,
)
cr.reg_scatter(
title="PPI inflation and subsequent 2year IRS returns since 2000 across all markets",
labels=False,
coef_box="upper right",
xlab="PPI trend, %6m/6m, ar, seasonallyadjusted, end of month",
ylab="Next month's 2year IRS fixed receiver returns",
prob_est="map",
)
Appendices #
Appendix 1: How technical macro trends are estimated #
The basics in a nutshell #
Unlike market trends, trends in the macro quantamental space refer to fundamental economic changes as observed by financial markets. Since broad trends in many areas are reported with long lags, their timely estimation requires some econometric modelling. And since these models plausibly change over time, their construction for the purpose of backtesting and future trading requires some automation, by combining econometrics with machine learning. A practical approach to such technical macro trends is “twostage supervised learning”. Its first stage is scouting features (predictors), by applying a regularization algorithm, such as “elastic net”, to available data sets during the regular release cycle, which identifies competitive features based on timelines and predictive power. Sequential scouting gives feature vintages. The second stage evaluates various candidate models based on the concurrent feature vintages and selects at any point in time one with the best historic predictive power. Sequential evaluation gives data vintages. For a more thorough explanation of this principle, view the summary here .
Conventional econometric models, such as those used by central banks, are immutable and not a valid basis for backtesting trading strategies. That is because they are being built and redesigned with hindsight and do not aim at replicating perceived economic trends in real time. Even if estimated parameters are sequentially updated, hyperparameters (structural model decisions) are not. By contrast, technical macro trends evolve in accordance with three types of changes arising from the information flow: (1) new information on fundamental developments (as captured by static prediction models), (2) revisions of prediction model parameters (implemented by some nowcasting frameworks), and (3) changes in prediction model structure (implemented by supervised statistical learning). In practice, this requires dealing with three major challenges: the feature selection problem, the publication lag and frequency problem, and the prediction problem.
The feature selection problem #
Many broad macro indicators such as national accounts and corporate earnings, are published in low frequency and with considerable lags after the observed period. That is why markets predict their forthcoming releases based on more timely higherfrequency indicators. In the context of machine learning, unpublished key indicators become targets and the higherfrequency predictors become features (aka predictors) or at least feature candidates.
The choice of features is a key structural model decision. The challenge is to allow the algorithm to support that choice in a consistent fashion for the past, present and future. A feature should only be added at any given real time date if it had helped predicting the target prior to the date. JPMaQS makes this choice by applying the elastic net regularization method to all plausible features used by the market at a given point in the data cycle. All plausible features refers to all indicators that are rated as important by market news services (release calendars) that are logically and directly related to the target. For example, the plausible features for annual GDP growth rate are mostly annual percent changes or differences in activity indices. Asset returns or analyst predictions do not qualify. Point in the data cycle means a point in time between two first releases of the lowfrequency target, which is related to the available subset of predictors.
During the length of the cycle, JPMaQS considers the growing set of features as forecasting candidates and if a feature has value as a predictor even just one day in the cycle  according to the elastic net  it is preselected as feature of the model going forward. This preselection is revised annually.
The lag and frequency problem #
Economic data that informs on activity of an observed period (typically a month) are released with varying delays. On any given day, the market sees only a smaller or larger subset of all interesting indicators for a recent period. This is equivalent to what econometricians call the “jagged edge” of recent data sets, the appearance of various “nonavailable” entries in the data matrix used for lowfrequency indicator prediction.
These nonavailable entries will be filled by predictions based on all available highfrequency values. For example, if a feature is available for January but not February and March, its values for February and March will be equal to the January value plus a prediction of change based on its correlation with all other features that have already been released for February and March respectively. For further information, see Appendix 2 below.
The prediction problem #
If one has chosen the right features and “filled in” their missing values, one needs to formalize an appropriate and robust relation between the features and their target. Estimating such a relation may not be very stable if there are many features and short time series. Hence, JPMaQS predicts the lowfrequency target value by using the values of the first principal component of the feature set for all highfrequency periods in question. The prediction itself is than done with ordinary least squares regression. Linear regression on principle components is a most simple prediction method that has been very popular in market economics for decades. For more information, see Appendix 3 .
Important technical details #
Some of the most financially significant economic indicators suffer from the low frequency with which they are published. Fortunately, indicators of a higher frequency often prevail which indirectly inform on forthcoming lowfrequency tickers. For example, the task of calculating the Gross Domestic Product price deflator (PGDP) inexorably renders it a quarterly observed macrovariable. Incremental changes in RGDP can nevertheless be estimated between releases by looking at innovations in monthly macro variables such as the unemployment rate, industrial production, and consumer confidence surveys.
Technical Indicators was thus born out of a need for a universal machine which maps high frequency macrovariables into an effective present estimate of lower frequency variables of interest  without losing economic plausibility and intuition in the process. In designing such a system, we have addressed three key methodological issues viz.:
(1) Preselection of features : How can we make an economically plausible preliminary assessment of which highfrequency variables to include, void of forward looking bias?
(2) Dealing with release schedule inequality : Upon lining up highfrequency series for prediction purposes, one may find some of the recent values to be missing. These NaNs are spawned by series which have yet to be released in the latest available observation period. How does one go about handling this socalled jagged edge? (See figure below).
(3) Estimating the lowfrequency series : Finally, a map between input features (highfrequency variables) and response (lowfrequency variable) needs to be learned. How do we formalize such a relationship?
The technical details of these three points are presented below.
We will assume that across our features and response variables, we are dealing with growth rates (or difference in levels) over the same window of time (typically, annually). For example, for PGDP (an Index) we look at the percentage change over a year ago. Applying these transformations will in the majority of cases guarantee that our series are stationary. To curb the effect of outliers in the data, it may be desirable to further introduce some level of winsorization , e.g. by applying a log transformation beyond a certain threshold.
Preselection of Features #
Deciding which features to use in our model is a delicate matter. Should we invoke considerable domainexpertise by having an economist preselect our feature space, or should we throw anything but the kitchen sink at our problem? Neither approach is strictly speaking desirable, being respectively prone to hindsight bias and numerical noise / short fat data issues. Rather, we desire a systematic feature reduction technique (i.e. elastic net ) which can help prune our feature space. To mimic the data release schedule, we will make a running assessment of which features economist plausibly would consider adding to their model between quarterly releases. As information is released between quarters, we shall consider this growing set of macroindicators as forecasting candidates. If a feature at any point during this quarterly lifecycle exhibits explanatory power, we consider it as preselected for the purpose of steps (2) and (3).
More formally, let \(q_0, q_1, q_2, ..., q_n\) be a series of quarterly releases of the response variable, and let \(\{q_i, q_{i+1}\}\) be any two contiguous releases. Let \(t[i], t[i+1]\) be the times at which they are released and let \(t \in [t[i], t[i+1]) \equiv \mathbb{T}_{i+1}\) be some time at which we desire an estimate of the quarterly release. Furthermore, let \(\mathbb{F}_{i+1}=\{f_1,f_2,...,f_p\}\) be the set of macropredictors (features) released in the interval \(\mathbb{T}_{i+1}\) . Typically these predictors have monthly observations, but importantly they are not all released at the same time.
Now suppose we are in the business of forecasting \(q_{i+1}\) . First we will look at the previous release interval \(\mathbb{T}_i \equiv[t[i1],t[i])\) and rank all macroeconomic indicators according to their release date. For this exercise we are only interested in those releases which have observation periods inside of \(\mathbb{T}_i\) . Now \(\forall t \in \mathbb{T}_{i}\) let \(\mathbb{F}_{t,i}\) be the space of all such features that have been released in \([t[i1],t]\) (e.g. in today is Feb 27 we’d consider all features with releases between this date and the previous quarterly release). We align all features \(f \in \mathbb{F}_{t,i}\) based on their observation periods in the matrix \(X_t\) , forwardfill the jagged edge, and finally shift all observation periods \(\Delta\) months forward, where \(\Delta\) is the number of months between the last observation period in \(X_t\) and the last observation period in \(q_t\) . Next we extract the important features at time \(t\) by performing a constrained regression of the quarterly release against this timeshifted feature matrix, specifically via a crossvalidated Elastic Net. By normalizing features inside the crossvalidation pipeline, we allow ourselves to readoff the magnitude of the regression coefficients directly as importance weights, without leaking in future information. Importantly, features with zero coefficients are deemed irrelevant for the forecast at time \(t\) .
Let \(\mathbb{I}_{t,i} \subseteq \mathbb{F}_{t,i}\) be the subset of features thus selected, then for the purpose of our forecast in step 2 we will maximally consider using all of those features we at some point picked out during \(\mathbb{T}_i\) . Specifically, for our \(q_{i+1}\) forecast we will use the features:
NOTE : In practice, we only perform preselection once per annum to reduce the computational burden.
Dealing with Release Schedule Inequality (the “Jagged Edge”) #
Having established which features we want to consider at time \(t\) , we can construct the associated feature matrix \(X_t\) which will be used in learning the map \(f: X \mapsto q\) . Again, we are faced with the jagged edge: certain features might have missing recent observations in \(X_t\) as they are yet to be published.
To overcome this issue, we make two important empirical observations: first , individual features typically exhibit strong correlation with their first lag. Secondly , the first difference of \(X_t\) showns nonzero cross correlations between features. Using the notational convention that \(x_{i,:}\) is the \(i^{th}\) row of \(X_t\) , this motivates us to postulate that \(x_{i,:}\) obeys the dynamical relationship
where \(\Sigma\) is a covariance matrix the offdiagonal entries of which need not be zero. Prosaically, feature values at observation point \(i\) are assumed multinormally distributed, centered around their most recent value, but not independently so. The benefit of this model is that it is easy to estimate. Crucially, it also enables us to fill out NaNs in \(X_t\) in a “nontrivial” way by computing conditional expectations based of partially observed information (the publication of a subset of features). Effectively, shocks in observed values visavis their expectation will propagate to unobserved values.
To see how this works, consider the simple case of a bivariate feature matrix \(X_t \in \mathbb{R}^{N \times 2}\) for which \(x_{:,1}\) is completely specified but \(x_{:,2}\) has a missing value at the end ( \(x_{N;2} \in \emptyset\) ). We are interested in computing \(\mathbb{E}[x_{N;2}  x_{N;1}=x]\)  the conditional expectation for the missing value in feature 2, given our knowledge of the most recent realisation in feature 1. Assuming the joint distribution \(\forall i\) :
where the \(\sigma_i\) s codify variance and \(\rho\) the correlation, it can be shown that
Intuitively this tells us that if the (differenced) series are independent ( \(\rho=0\) ) then the expected value for \(x_{N;2}\) is just the most recently available observation: \(x_{N1;2}\) . On the other hand, if \(\rho \neq 0\) , the surprise from the observation in feature 1 (i.e. the observed feature 1 value less its marginal expectation), perturbs our expectation for \(x_{N,2}\) away from \(x_{N1;2}\) with magnitude \(\rho \sigma_2 /\sigma_1\) . If the surprise is positive (negative) and \(\rho>0\) ( \(\rho<0\) ) this would entail a bump upwards in our expectation for \(x_{N;2}\) . On the other hand, if the surprise is positive (negative) and \(\rho<0\) ( \(\rho > 0\) ) we would lower our expectations for the value of \(x_{N;2}\) .
The same general idea extends to feature matrices of higher dimensionality. For an overview of computing conditional expectations with the multivariate normal distribution the reader is referred to the Wikipedia entry.
Estimating the Lowfrequency Series #
Upon formalizing a relationship between input features and response we follow a somewhat familiar path in the nowcasting literature which is deploy a factormodel. Specifically, we extract the first principal component of the featurematrix alongside the first and second lag thereof and run the regression:
(Here \(PC_1\) is the first principal component of \(X_t\) and \(\text{lag}(PC_1,n)\) is the same vector shifted \(n\) units forward, while \(\epsilon\) is a noise term). The coefficients are immediately obtained through ordinary least squares (OLS) using the available (quarterly) data. The model is thus not only easy to estimate, but also easy to interpret. The inclusion of the lagged variables is motivated by the idea that running monthly observations inside a quarter all “add up” to the quarterly release.
Finally, by plugging in the final entry of \([PC_1, \text{lag}(PC_1,1), \text{lag}(PC_1,2)]\) into this relationship we obtain the present purported value of the quarterly variable.
Methodological Pseudocode #
To summarise, technical indicators operates along the following lines:
For \(t\) in all possible ordered feature releases :{
If \(t\) is a new year: Preselect features \(\mathbb{I}\) for consideration using a running elastic net regression (step (1)).
Construct the feature matrix \(X_t\) using features \(\mathbb{I}\) . Populate the jagged edge using a conditional multivariate normal assumption (step (2)).
Regress the first PC of \(X_t\) against the quarterly variable (overlapping quarterly observations only). Use the last entry in \(X_t\) to make an estimate as to where the quarterly variable is “now” (step (3)).
}
Appendix 2: Feature candidates output price trends #
Broad output price trends  developed markets #
AUD

Brent Forties Oseberg Month 1 Europe FOB  AUD

Australia, TDMI Inflation Gauge, Index, Melbourne Institute of Applied Economic & Social Research, Index

AUD, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
CAD

NYMEX  Light Crude Oil  CAD

Canada, Producer Price Index, Industrial, Total, Statistics Canada, Index

Canada, Consumer Price Index, Total, SA, Statistics Canada, Index

CAD, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade

Canada wages composite
CHF

Brent Forties Oseberg Month 1 Europe FOB  CHF

Switzerland, Producer Price Index, Total, Swiss Federal Statistical Office (Bundesamt fuer Statistik), Index

Switzerland, Consumer Price Index, Total, Base Year 2015, Swiss Federal Statistical Office (Bundesamt fuer Statistik), Index

CHF, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
EUR

Brent Forties Oseberg Month 1 Europe FOB  EUR

Euro Area 19, Producer Price Index, Domestic, Industrial Domestic Output Prices  Total Industry (excluding Construction), Eurostat, Index

Euro Area, ECB, Consumer Price Index (HICP), Institution Originating the Data: ECB, Eurostat, Overall Index

EUR, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
GBP

Brent Forties Oseberg Month 1 Europe FOB  GBP

United Kingdom, Producer Price Index, Output, Manufactured Products for Domestic Market, U.K. Office for National Statistics (ONS), Index

New, Consumer Price Inflation, NOT seasonal adjusted, TCPI after, Previously RPI, U.K. Office for National Statistics (ONS), Index, U.K. Office for National Statistics (ONS),

GBP, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade

United Kingdom, Average Weekly Earnings, Total Economy, Total Pay, SA, GBP
JPY

Brent Forties Oseberg Month 1 Europe FOB  JPY

Japan, Producer Price Index, Goods, Total, Japanese Statistics Bureau, Ministry of Internal Affairs & Communications, Index

Japan, Consumer Price Index, Total, All Japan, Japanese Statistics Bureau, Ministry of Internal Affairs & Communications, Index

JPY, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade

Japan wages composite
KRW

Brent Forties Oseberg Month 1 Europe FOB  KRW

South Korea, Producer Price Index, Total, Statistics Korea (KoSIS), Index

South Korea, Consumer Price Index, Total, Statistics Korea (KoSIS), Index

KRW, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade

South Korea, Wages & Salaries, Wages, Sector, All Scale, Total, KRW, Ministry of Employment and Labor
NOK

Brent Forties Oseberg Month 1 Europe FOB  NOK

Norway, Producer Price Index, Total (Whole Economy), Statistics Norway, Index

Norway, Consumer Price Index, Statistics Norway, Index

NOK, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
NZD

Brent Forties Oseberg Month 1 Europe FOB  NZD

NZD, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
SEK

Brent Forties Oseberg Month 1 Europe FOB  SEK

Sweden, Producer Price Index, Total, Total, Statistics Sweden (SCB), Index

Sweden, Consumer Price Index, CPIF, Statistics Sweden (SCB), Index

Sweden wages composite

SEK, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
SGD

Brent Forties Oseberg Month 1 Europe FOB  SGD

Singapore, Manufactured Products Price Index, Total, Singapore Department of Statistics (SingStat), Index

Singapore, Consumer Price Index, Total, SA, Singapore Department of Statistics (SingStat), Index

SGD, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
USD

NYMEX  Light Crude Oil

United States, Producer Price Index, FDID, Final Demand, Overall, U.S. Bureau of Labor Statistics (BLS), Index

United States, Consumer Price Index, All Urban Consumers, U.S. City Average, All Items, SA, U.S. Bureau of Labor Statistics (BLS), Index

USD, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade

United States, Earnings, Average Weekly Earnings, All Employees, Total Private, SA, USD, U.S. Bureau of Labor Statistics (BLS)
Broad output price trends  developing markets #
BRL

Brent Forties Oseberg Month 1 Europe FOB  BRL

Brazil, Producer Price Index, Total, Brazilian Institute of Geography & Statistics (IBGE), Index

Brazil, Consumer Price Index, Extended National, Total (IPCA), SA, Total,Brazilian Institute of Geography & Statistics (IBGE), Index

Brazil, OECD MEI, Labour Compensation, Earnings, All Activities, Monthly, BRL, OECD

BRL, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
CLP

Brent Forties Oseberg Month 1 Europe FOB  CLP

Chile, Producer Price Index, Total, Chilean National Statistics Institute (INE, Instituto Nacional de Estadistica), Index

Chile, Consumer Price Index, Total, Chilean National Statistics Institute (INE, Instituto Nacional de Estadistica), Index

Chile, Earnings, Total, Current Prices, CLP, Chilean National Statistics Institute (INE, Instituto Nacional de Estadistica)

CLP, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
CNY

Brent Forties Oseberg Month 1 Europe FOB  CNY

China, Consumer Price Index, National, All Areas, Total, China National Bureau of Statistics (NBS), Change P/P

China, Producer Price Index, National, By Commodity, Total ,Total, China National Bureau of Statistics (NBS), Change P/P

CNY, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
COP

Brent Forties Oseberg Month 1 Europe FOB  COP

Colombia, Producer Price Index, Production, National, Total, Colombian National Administrative Department of Statistics (DANE), Index

Colombia, Consumer Price Index, Total, Colombian National Administrative Department of Statistics (DANE), Index

Colombia, Earnings, Wage Index, Nominal, Retail Trade, Total, Index, Central Bank of Colombia

COP, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
CZK

Brent Forties Oseberg Month 1 Europe FOB  CZK

Czech Republic, Producer Price Index, Industry, Total, Czech Statistical Office, Index

Czech Republic, Consumer Price Index, Total, Czech Statistical Office, Index

Czech Republic, Wages & Salaries, Gross Wages, Average Monthly, FullTime, Total, CZK, Czech Statistical Office

CZK, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
HUF

Brent Forties Oseberg Month 1 Europe FOB  HUF

Hungary, Producer Price Index, Total Economy, Total, Total Industry, Hungarian Central Statistical Office (HCSO), Index

Hungary, Consumer Price Index, Groups of Expenditure, All Items, Total, PP=100, Hungarian Central Statistical Office (HCSO), Index

Hungary, Earnings, Net Monthly, Full Time Employees, National Economy, Without Tax Benefits, Monthly Regular Earnings, Total, HUF, Hungarian Central Statistical Office (HCSO)

HUF, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
IDR

Brent Forties Oseberg Month 1 Europe FOB  IDR

Indonesia, Producer Price Index, Total, Statistics Indonesia (Badan Pusat Statistik, BPS), Index

Indonesia, Consumer Price Index, Total, General, Statistics Indonesia (Badan Pusat Statistik, BPS), Index

IDR, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
ILS

Brent Forties Oseberg Month 1 Europe FOB  ILS

Israel, Producer Price Index, Domestic, Total, Wholesale, Total, Israel Central Bureau of Statistics (CBS), Index

Israel, Consumer Price Index, Total, Israel Central Bureau of Statistics (CBS), Index

Isreal wages composite

ILS, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
INR

Brent Forties Oseberg Month 1 Europe FOB  INR

India, Wholesale Price Index, All Commodities, Indian Ministry of Statistics & Programme Implementation (MoS&PI), Index

India, Consumer Price Index, Urban & Rural Combined, Indian Ministry of Statistics & Programme Implementation (MoS&PI), Index

INR, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
MXN

Brent Forties Oseberg Month 1 Europe FOB  MXN

Mexico, Producer Price Index, Total, Including Oil & Services, Mexican National Institute of Geography & Statistics, Index

Mexico, Consumer Price Index, Total, Mexican National Institute of Geography & Statistics, Index

Mexico wages composite

MXN, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
MYR

Brent Forties Oseberg Month 1 Europe FOB  MYR

Malaysia, Producer Price Index, Total, Department of Statistics Malaysia (DOSM), Index

Malaysia, Consumer Price Index, Total, Department of Statistics Malaysia (DOSM), Index

Malaysia, Wages & Salaries, Manufacturing, MYR, Department of Statistics Malaysia (DOSM)

MYR, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
PEN

Brent Forties Oseberg Month 1 Europe FOB  PEN

Peru, Producer Price Index, National, Total, Peruvian National Institute of Statistics & Informatics (INEI), Index

Peru, Consumer Price Index, Lima, Total, Peruvian National Institute of Statistics & Informatics (INEI), Index

Peru, Monthly Average Income, Lima, Total, 3 Month Moving Average, PEN, Central Reserve Bank of Peru

PEN, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
PHP

Brent Forties Oseberg Month 1 Europe FOB  EURO

Philippines, Producer Price Index, Total Manufacturing, Philippine Statistics Authority, Index

Philippines, Consumer Price Index, Total, Total, Philippine Statistics Authority, Index

PHP, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
PLN

Brent Forties Oseberg Month 1 Europe FOB  PLN

Poland, Producer Price Index, Industry, Sold Production Price Index, Polish Central Statistical Office (GUS), Index

Poland, Harmonized CPI, Total, Polish Central Statistical Office (GUS), Index

Poland, Wages & Salaries, Enterprise Sector, Gross Monthly Average, Total, PLN, Polish Central Statistical Office (GUS)

PLN, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
RON

Brent Forties Oseberg Month 1 Europe FOB  RON

Romania, Producer Price Index, Total Market, Total, Romanian National Institute of Statistics, Index

Romania, Consumer Price Index, Total, PP=100, Romanian National Institute of Statistics, Index

Romania, Wages & Salaries, Monthly Gross Average, Current Prices, Per Employee, RON, Romanian National Institute of Statistics

RON, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
RUB

Brent Forties Oseberg Month 1 Europe FOB  RUB

Russia, Producer Price Index, Domestic Market, Total, Total, Russian Federal State Statistics Service (Rosstat), Index

Russia, Consumer Price Index, Total, PP=100, Russian Federal State Statistics Service (Rosstat), Index

Russia, Wages & Salaries, Nominal Wages, Average Monthly, Total, RUB, Russian Federal State Statistics Service (Rosstat

RUB, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
THB

Brent Forties Oseberg Month 1 Europe FOB  THB

Thailand, Producer Price Index, Total, Thailand Bureau of Trade & Economic Indices, Index

Thailand, Consumer Price Index, Total, Thailand Bureau of Trade & Economic Indices, Index

Thailand, Wages & Salaries, By Industry, Total, Total, THB, Bank of Thailand

THB, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
TRY

Brent Forties Oseberg Month 1 Europe FOB  TRY

Turkey, Producer Price Index, Domestic, Total, Index

Turkey, Consumer Price Index, Total, Index

TRY, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
TWD

Brent Forties Oseberg Month 1 Europe FOB  TWD

Taiwan, Producer Price Index, Total, Taiwan DirectorateGeneral of Budget, Accounting & Statistics, Index

Taiwan, Consumer Price Index, Total, SA, Taiwan DirectorateGeneral of Budget, Accounting & Statistics, Index

Taiwan, Monthly Average Income, Industry & Services, Total, TWD, TWD, Taiwan DirectorateGeneral of Budget, Accounting & Statistics

TWD, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
ZAR

Brent Forties Oseberg Month 1 Europe FOB  ZAR

South Africa, Producer Price Index, Manufactured Goods, Final, Total, Total, South African Statistics (Stat SA), Index

South Africa, Consumer Price Index, All Country, All Items, South African Statistics (Stat SA), Index

ZAR, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
Broad output price trends euro countries #
DEM

Brent Forties Oseberg Month 1 Europe FOB  EURO

Germany, Producer Price Index, Industrial Products, Total, German Federal Statistical Office (Statistisches Bundesamt), Index

Germany, Consumer Price Index, Total, German Federal Statistical Office (Statistisches Bundesamt), Index

German wages composite

EUR, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
ESP

Brent Forties Oseberg Month 1 Europe FOB  EURO

Spain, Producer Price Index, Industrial, Total, Spanish National Statistics Institute (INE), Index

Spain, Consumer Price Index, Total, Spanish National Statistics Institute (INE), Chained, Index

EUR, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
FRF

Brent Forties Oseberg Month 1 Europe FOB  EURO

France, Producer Price Index, Industry, Total, Overall Industry, Index, French National Institute of Statistics & Economic Studies (INSEE), Basic Prices

France, Consumer Price Index, All Items, SA,French National Institute of Statistics & Economic Studies (INSEE), Index

EUR, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
ITL

Brent Forties Oseberg Month 1 Europe FOB  EURO

Italy, Producer Price Index, Total, Total Industry Excluding Construction, Italian National Institute of Statistics (Istat), Index

Italy, Consumer Price Index, Total with Tobacco, Italian National Institute of Statistics (Istat), Index

Italy, Wages & Salaries, Wages, Hourly, Total, Index

EUR, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
NLG

Brent Forties Oseberg Month 1 Europe FOB  EURO

Netherlands, Producer Price Index, Manufactured Products, Total, Output Prices,Statistics Netherlands (CBS), Index

Netherlands, Consumer Price Index, Total,Statistics Netherlands (CBS), Index

Netherlands, Wages composite

EUR, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
Narrow output price trends  developed countries #
CAD

Canada, Producer Price Index, Industrial, Total, Statistics Canada, Index

Canada, Consumer Price Index, Total, SA, Statistics Canada, Index

Canada wages composite
CHF

Switzerland, Producer Price Index, Total, Swiss Federal Statistical Office (Bundesamt fuer Statistik), Index

Switzerland, Consumer Price Index, Total, Base Year 2015, Swiss Federal Statistical Office (Bundesamt fuer Statistik), Index
EUR

Euro Area 19, Producer Price Index, Domestic, Industrial Domestic Output Prices  Total Industry (excluding Construction), Eurostat, Index

Euro Area, ECB, Consumer Price Index (HICP), Institution Originating the Data: ECB, Eurostat, Overall Index
GBP

United Kingdom, Producer Price Index, Output, Manufactured Products for Domestic Market, U.K., Office for National Statistics (ONS), Index

New, Consumer Price Inflation, NOT seasonal adjusted, TCPI after, Previously RPI, U.K. Office for National Statistics (ONS), Inex

United Kingdom, Average Weekly Earnings, Total Economy, Total Pay, SA, GBP, Office for National Statistics (ONS)
JPY

Japan, Producer Price Index, Goods, Total, Japanese Statistics Bureau, Ministry of Internal Affairs & Communications, Index

Japan, Consumer Price Index, Total, All Japan, Japanese Statistics Bureau, Ministry of Internal Affairs & Communications, Index

Japan wages composite
KRW

South Korea, Producer Price Index, Total, Statistics Korea (KoSIS), Index

South Korea, Consumer Price Index, Total, Statistics Korea (KoSIS), Index

South Korea, Wages & Salaries, Wages, Sector, All Scale, Total, KRW, Ministry of Employment and Labor
NOK

Norway, Producer Price Index, Total (Whole Economy), Statistics Norway, Index

Norway, Consumer Price Index, Statistics Norway, Index
NZD

Brent Forties Oseberg Month 1 Europe FOB  NZD

NZD, Nominal effective exchange rate, JPMorgan

Export price index, based on commodity trade
SEK

Sweden, Producer Price Index, Total, Total, Statistics Sweden (SCB), Index

Sweden, Consumer Price Index, CPIF, Statistics Sweden (SCB), Index

Sweden wages composite
SGD

Singapore, Manufactured Products Price Index, Total, Singapore Department of Statistics (SingStat), Index

Singapore, Consumer Price Index, Total, SA, Singapore Department of Statistics (SingStat), Index
USD

United States, Producer Price Index, FDID, Final Demand, Overall, U.S. Bureau of Labor Statistics (BLS), Index

United States, Consumer Price Index, All Urban Consumers, U.S. City Average, All Items, SA, U.S. Bureau of Labor Statistics (BLS), Index

United States, Earnings, Average Weekly Earnings, All Employees, Total Private, SA, USD, U.S. Bureau of Labor Statistics (BLS)
Narrow output price trends  Developing countries #
BRL

Brazil, Producer Price Index, Total, Brazilian Institute of Geography & Statistics (IBGE), Index

Brazil, Consumer Price Index, Extended National, Total (IPCA), SA, Total,Brazilian Institute of Geography & Statistics (IBGE), Index

Brazil, OECD MEI, Labour Compensation, Earnings, All Activities, Monthly, BRL, OECD
CLP

Brent Forties Oseberg Month 1 Europe FOB  CLP

Chile, Producer Price Index, Total, Chilean National Statistics Institute (INE, Instituto Nacional de Estadistica), Index

Chile, Consumer Price Index, Total, Chilean National Statistics Institute (INE, Instituto Nacional de Estadistica), Index

Chile, Earnings, Total, Current Prices, CLP, Chilean National Statistics Institute (INE, Instituto Nacional de Estadistica)
CNY

China, Consumer Price Index, National, All Areas, Total, China National Bureau of Statistics (NBS), Change P/P

China, Consumer Price Index, National, All Areas, Total, China National Bureau of Statistics (NBS), Change P/P
COP

Colombia, Producer Price Index, Production, National, Total, Colombian National Administrative Department of Statistics (DANE), Index

Colombia, Consumer Price Index, Total, Colombian National Administrative Department of Statistics (DANE), Index

Colombia, Earnings, Wage Index, Nominal, Retail Trade, Total, Index, Central Bank of Colombia
CZK

Czech Republic, Producer Price Index, Industry, Total, Czech Statistical Office, Index

Czech Republic, Consumer Price Index, Total, Czech Statistical Office, Index

Czech Republic, Wages & Salaries, Gross Wages, Average Monthly, FullTime, Total, CZK, Czech Statistical Office
HUF

Hungary, Producer Price Index, Total Economy, Total, Total Industry, Hungarian Central Statistical Office (HCSO), Index

Hungary, Consumer Price Index, Groups of Expenditure, All Items, Total, PP=100, Hungarian Central Statistical Office (HCSO), Index

Hungary, Earnings, Net Monthly, Full Time Employees, National Economy, Without Tax Benefits, Monthly Regular Earnings, Total, HUF, Hungarian Central Statistical Office (HCSO)
IDR

Indonesia, Producer Price Index, Total, Statistics Indonesia (Badan Pusat Statistik, BPS), Index

Indonesia, Consumer Price Index, Total, General, Statistics Indonesia (Badan Pusat Statistik, BPS), Index
ILS

Israel, Producer Price Index, Domestic, Total, Wholesale, Total, Israel Central Bureau of Statistics (CBS), Index

Israel, Consumer Price Index, Total, Israel Central Bureau of Statistics (CBS), Index

Isreal wages composite
INR

India, Wholesale Price Index, All Commodities, Indian Ministry of Statistics & Programme Implementation (MoS&PI), Index

India, Consumer Price Index, Urban & Rural Combined, Indian Ministry of Statistics & Programme Implementation (MoS&PI), Index
MXN

Mexico, Producer Price Index, Total, Including Oil & Services, Mexican National Institute of Geography & Statistics, Index

Mexico, Consumer Price Index, Total, Mexican National Institute of Geography & Statistics, Index

Mexico wages composite
MYR

Malaysia, Producer Price Index, Total, Department of Statistics Malaysia (DOSM), Index

Malaysia, Consumer Price Index, Total, Department of Statistics Malaysia (DOSM), Index

Malaysia, Wages & Salaries, Manufacturing, MYR, Department of Statistics Malaysia (DOSM)
PEN

Peru, Producer Price Index, National, Total, Peruvian National Institute of Statistics & Informatics (INEI), Index

Peru, Consumer Price Index, Lima, Total, Peruvian National Institute of Statistics & Informatics (INEI), Index

Peru, Monthly Average Income, Lima, Total, 3 Month Moving Average, PEN, Central Reserve Bank of Peru
PHP

Philippines, Producer Price Index, Total Manufacturing, Philippine Statistics Authority, Index

Philippines, Consumer Price Index, Total, Total, Philippine Statistics Authority, Index
PLN

Poland, Producer Price Index, Industry, Sold Production Price Index, Polish Central Statistical Office (GUS), Index

Poland, Harmonized CPI, Total, Polish Central Statistical Office (GUS), Index

Poland, Wages & Salaries, Enterprise Sector, Gross Monthly Average, Total, PLN, Polish Central Statistical Office (GUS)
RON

Romania, Producer Price Index, Total Market, Total, Romanian National Institute of Statistics, Index

Romania, Consumer Price Index, Total, PP=100, Romanian National Institute of Statistics, Index

Romania, Wages & Salaries, Monthly Gross Average, Current Prices, Per Employee, RON, Romanian National Institute of Statistics
RUB

Russia, Producer Price Index, Domestic Market, Total, Total, Russian Federal State Statistics Service (Rosstat), Index

Russia, Consumer Price Index, Total, PP=100, Russian Federal State Statistics Service (Rosstat), Index

Russia, Wages & Salaries, Nominal Wages, Average Monthly, Total, RUB
THB

Thailand, Producer Price Index, Total, Thailand Bureau of Trade & Economic Indices, Index

Thailand, Consumer Price Index, Total, Thailand Bureau of Trade & Economic Indices, Index

Thailand, Wages & Salaries, By Industry, Total, Total, THB, Bank of Thailand
TRY

Turkey, Producer Price Index, Domestic, Total, Index

Turkey, Consumer Price Index, Total, Index
TWD

Taiwan, Producer Price Index, Total, Taiwan DirectorateGeneral of Budget, Accounting & Statistics, Index

Taiwan, Consumer Price Index, Total, SA, Taiwan DirectorateGeneral of Budget, Accounting & Statistics, Index

Taiwan, Monthly Average Income, Industry & Services, Total, TWD, Taiwan DirectorateGeneral of Budget, Accounting & Statistics
ZAR

South Africa, Producer Price Index, Manufactured Goods, Final, Total, Total, South African Statistics (Stat SA), Index

South Africa, Consumer Price Index, All Country, All Items, South African Statistics (Stat SA), Index
Narrow output price trends  Euro countries #
DEM

Germany, Producer Price Index, Industrial Products, Total, German Federal Statistical Office (Statistisches Bundesamt), Index

Germany, Consumer Price Index, Total, German Federal Statistical Office (Statistisches Bundesamt), Index

German wages composite
ESP

Spain, Producer Price Index, Industrial, Total, Spanish National Statistics Institute (INE), Index

Spain, Consumer Price Index, Total, Spanish National Statistics Institute (INE), Chained, Index
FRF

France, Producer Price Index, Industry, Total, Overall Industry, Index, French National Institute of Statistics & Economic Studies (INSEE), Basic Prices

France, Consumer Price Index, All Items, SA, French National Institute of Statistics & Economic Studies (INSEE), Index
ITL

Brent Forties Oseberg Month 1 Europe FOB  EURO

Italy, Producer Price Index, Total, Total Industry Excluding Construction, Italian National Institute of Statistics (Istat), Index

Italy, Consumer Price Index, Total with Tobacco, Italian National Institute of Statistics (Istat), Index

Italy, Wages & Salaries, Wages, Hourly, Total, Index, Italian National Institute of Statistics (Istat)
NLG

Netherlands, Producer Price Index, Manufactured Products, Total, Output Prices,Statistics Netherlands (CBS), Index

Netherlands, Consumer Price Index, Total,Statistics Netherlands (CBS), Index

Netherlands, Wages composite
Appendix 3: Feature selection #
def feat_dict_to_pd(feat_dict):
new_dict={}
for key in feat_dict:
new_dict[key] = eval(feat_dict[key])
feat_dict=new_dict
features = set()
for i in feat_dict.values():
features = features.union(i)
psf = {}
order = {}
feat_list = list(features)
for key in feat_dict:
order[key[0:4]]=[True if e in feat_dict[key] else False for e in feat_list]
df = pd.DataFrame(order,index=feat_list)
return df
features_broad=requests.get("https://featureselectionbroadprod.s3.euwest2.amazonaws.com/feature_selection_broad.json").json()
features_narrow = requests.get("https://featureselectionnarrowprod.s3.euwest2.amazonaws.com/feature_selection_narrow.json").json()
The above github gists have the feature selection information for each cross section and the function easily visualises it, download the notebook to look at each cross section.
The steps to do so are as follows, choose if you want narrow or broad output prices and which cross section you want to visualise. Create the data by calling the function feat_dict_to_pd, with the input ‘features_narrow[“CID”]’ or ‘features_broad[“CID”]’. Then finally use seaborn heatmap to visualise the dataframe.
df = feat_dict_to_pd(features_narrow["USD"])
fig=sns.heatmap(df,cbar=False,cmap=sns.light_palette("#79C"),linecolor='black',linewidths=1,vmin=0)
Appendix 4: Currency symbols #
The word ‘crosssection’ refers to currencies, currency areas or economic areas. In alphabetical order, these are AUD (Australian dollar), BRL (Brazilian real), CAD (Canadian dollar), CHF (Swiss franc), CLP (Chilean peso), CNY (Chinese yuan renminbi), COP (Colombian peso), CZK (Czech Republic koruna), DEM (German mark), ESP (Spanish peseta), EUR (Euro), FRF (French franc), GBP (British pound), HKD (Hong Kong dollar), HUF (Hungarian forint), IDR (Indonesian rupiah), ITL (Italian lira), JPY (Japanese yen), KRW (Korean won), MXN (Mexican peso), MYR (Malaysian ringgit), NLG (Dutch guilder), NOK (Norwegian krone), NZD (New Zealand dollar), PEN (Peruvian sol), PHP (Phillipine peso), PLN (Polish zloty), RON (Romanian leu), RUB (Russian ruble), SEK (Swedish krona), SGD (Singaporean dollar), THB (Thai baht), TRY (Turkish lira), TWD (Taiwanese dollar), USD (U.S. dollar), ZAR (South African rand).