Can You Predict the NFP Using This Single Metric?
Creating a Simple Model in Python to Predict the Rise or Drop on the NFP
Jobs report is an important economic release for many countries and especially the US one as it serves as one of the pillars of monitoring inflation which leads monetary policies. This article presents a base of trying to forecast whether the NFP will rise this month or not using a single variable. Surely, economists have more complex models. Nevertheless, this article presents a very basic way of looking at a binary approach on the NFP (rise or fall).
The Non-Farm Payrolls
The term “non-farm payrolls,” frequently abbreviated as “NFP,” refers to the monthly report issued by the US Bureau of Labor Statistics that gives information on the number of employment created or eliminated in the US economy, excluding agricultural jobs.
Data from a survey of over 140,000 enterprises and government organizations, or about 1/3 of total non-farm private sector employment in the US, are included in the report.
The NFP sheds light on the state and trajectory of the US economy, is regarded as a crucial economic indicator. The NFP data is specifically watched closely by analysts and investors for clues about changes in employment, wage growth, and general economic growth. The Federal Reserve’s actions and those of other economic policymakers can be influenced by information in the report about the unemployment rate and other labor market indicators. The NFP is published every first Friday of every month.
In parallel, there is another indicator published two days before the NFP.
The private company Automatic Data Processing (ADP), which offers payroll and human resource services to businesses, publishes the ADP nonfarm payroll report. The Non-Farm Payrolls report from the Bureau of Labor Statistics is usually released a few days before the monthly release of this one.
The ADP report estimates the number of employment created or eliminated in the US economy’s private sector, excluding government and agricultural sectors. The ADP report, like the official Non-Farm Payrolls report, is closely monitored by analysts, investors, and policymakers as a crucial sign of the state of the economy and developments in the labor market.
The ADP report can offer a helpful preview of what to anticipate from the official statistics, even though it is not as thorough or reliable as the official Non-Farm Payrolls report. It also offers insights into particular industries or regions of the US economy that may not be as clear from the official figures because it is based on data from a sizable sample of ADP clients.
Our model would have the following assumption: The ADP’s change from the previous month can predict the NFP’s change from the previous month. It is basically another way of saying that if the ADP rises this month, then the NFP will rise. We will test this hypothesis using official numbers from 12 years ago, and Python.
Creating the Model in Python
First, let’s download the data of the ADP and the NFP. I have gathered and cleaned it and put in this GitHub repository which you can access and download here.
The steps we will follow are:
Import the excel file to the Python interpreter using pandas library.
Compare the monthly changes between the two indicators.
Calculate a hit ratio measure which assumes that if both have the same monthly change direction, then the forecast is assumed to be correct.
Given that the ADP is released before the NFP, we do not need to put any lagged values for the forecast.
This indicator is part of the weekly market sentiment report that covers a wide range of markets and shows directional opportunities based on market sentiment data. You can access the newsletter here:
The Weekly Market Sentiment Report: 4th June - 11th June 2023
This report will grow in time due to feedback and new techniques put into place. You may notice new markets added or…coalescence.substack.com
The full Python code to do this is as follows (make sure the directory is in the same place as the excel file):
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
adp_nfp = pd.read_excel('ADP-NFP.xlsx')
adp_nfp['Change in NFP'] = adp_nfp['NFP'].pct_change(periods = 1, axis = 0) * 100
adp_nfp['Change in ADP'] = adp_nfp['ADP'].pct_change(periods = 1, axis = 0) * 100
for index, row in adp_nfp.iterrows():
if row['Change in NFP'] > 0:
adp_nfp.at[index, 'Change in NFP'] = 1
else:
adp_nfp.at[index, 'Change in NFP'] = -1
for index, row in adp_nfp.iterrows():
if row['Change in ADP'] > 0:
adp_nfp.at[index, 'Change in ADP'] = 1
else:
adp_nfp.at[index, 'Change in ADP'] = -1
hits_pos = adp_nfp.loc[adp_nfp['Change in ADP'] == 1, 'Change in NFP'].eq(1).sum()
hits_neg = adp_nfp.loc[adp_nfp['Change in ADP'] == -1, 'Change in NFP'].eq(-1).sum()
hit_ratio = (hits_pos + hits_neg) / len(adp_nfp)
print('Hit ratio:', round(hit_ratio * 100, 2), '%')
The output of the code is as follows:
Hit ratio: 59.49 %
This means that you have a chance better than random of predicting whether the NFP will rise or drop compared to the last month. Historical probability tells us that you should have around 59.50 good forecasts for every 100 forecasts (if the historical relationship holds).
This model of course can be greatly improved with the addition of the consensus, more historical data, more economic variable, and we can also add a lag factor. We’ll do this in a future article, for now, let’s see what the next NFP data will say!