Project Overview¶
This project explores the impact of the Federal Reserve’s interest rate cuts in March 2020 and September 2024 on key economic indicators, including the NASDAQ Composite, Unemployment Rate, Inflation, and the 10-Year Treasury Yield. By analyzing these indicators through statistical methods and visualizations, we aim to understand how distinct economic contexts—crisis-driven in 2020 versus proactive support in 2024—influence market responses and the broader economy. This analysis sheds light on the nuanced role of monetary policy, revealing how rate cuts can drive investor sentiment, shape employment trends, and impact inflation under varying conditions.
Importing Libraries¶
%pip install -q pandas
%pip install -q nbformat
%pip install -q statsmodels
%pip install -q matplotlib
%pip install -q plotly
%pip install -q numpy
%pip install -q seaborn
Note: you may need to restart the kernel to use updated packages.
Note: you may need to restart the kernel to use updated packages.
Note: you may need to restart the kernel to use updated packages.
Note: you may need to restart the kernel to use updated packages.
Note: you may need to restart the kernel to use updated packages.
Note: you may need to restart the kernel to use updated packages.
Note: you may need to restart the kernel to use updated packages.
import pandas as pd
import numpy as np
import datetime
import random
import warnings
import seaborn as sns
import scipy.stats as stats
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import timedelta
warnings.filterwarnings(
"ignore",
message="X does not have valid feature names, but RandomForestRegressor was fitted with feature names"
)
Gathering Data¶
treasury_data = pd.read_csv('Data/10YrTsy.csv')
nasdaq_data = pd.read_csv('Data/NasdaqData.csv')
gdp_data = pd.read_csv('Data/GDP.csv')
inflation_data = pd.read_csv('Data/Inflation.csv')
unemployment_data = pd.read_csv('Data/Unemployment.csv')
fed_rates_data = pd.read_csv('Data/FedRates.csv')
treasury_data.rename(columns = {'DGS10':'10YrTsy'}, inplace = True)
nasdaq_data.rename(columns = {'Close':'NASDAQ Composite'}, inplace = True)
unemployment_data.rename(columns = {'UNRATE':'UnemploymentRate'}, inplace = True)
inflation_data.rename(columns = {'T10YIE':'Inflation'}, inplace = True)
gdp_data.rename(columns = {'GDPC1':'GDP'}, inplace = True)
fed_rates_data.rename(columns = {'FEDFUNDS':'FFR'}, inplace = True)
data = pd.merge(treasury_data, nasdaq_data, on='DATE', how='right')
data = pd.merge(data, gdp_data, on='DATE', how='left')
data = pd.merge(data, inflation_data, on='DATE', how='left')
data = pd.merge(data, unemployment_data, on='DATE', how='left')
data = pd.merge(data, fed_rates_data, on='DATE', how='left')
data = data.sort_values(by='DATE')
data['DATE'] = pd.to_datetime(data['DATE'], format='%Y-%m-%d')
data
DATE | 10YrTsy | NASDAQ Composite | GDP | Inflation | UnemploymentRate | FFR | |
---|---|---|---|---|---|---|---|
0 | 1971-02-05 | 6.10 | 100.00 | NaN | NaN | NaN | NaN |
1 | 1971-02-06 | NaN | 100.84 | NaN | NaN | NaN | NaN |
2 | 1971-02-07 | NaN | 100.84 | NaN | NaN | NaN | NaN |
3 | 1971-02-08 | 6.09 | 100.84 | NaN | NaN | NaN | NaN |
4 | 1971-02-09 | 6.07 | 100.76 | NaN | NaN | NaN | NaN |
... | ... | ... | ... | ... | ... | ... | ... |
19601 | 2024-10-05 | NaN | 18137.85 | NaN | NaN | NaN | NaN |
19602 | 2024-10-06 | NaN | 18137.85 | NaN | NaN | NaN | NaN |
19603 | 2024-10-07 | 4.03 | 17923.90 | NaN | 2.27 | NaN | NaN |
19604 | 2024-10-08 | 4.04 | 18182.92 | NaN | 2.27 | NaN | NaN |
19605 | 2024-10-09 | NaN | 18291.62 | NaN | 2.29 | NaN | NaN |
19606 rows × 7 columns
Data Cleaning¶
data.describe()
DATE | NASDAQ Composite | GDP | UnemploymentRate | FFR | |
---|---|---|---|---|---|
count | 19606 | 18809.000000 | 213.000000 | 644.000000 | 643.000000 |
mean | 1997-12-07 12:00:00 | 2787.836347 | 10380.074601 | 6.115839 | 4.873421 |
min | 1971-02-05 00:00:00 | 54.870000 | 1156.271000 | 3.400000 | 0.050000 |
25% | 1984-07-07 06:00:00 | 280.300000 | 4084.250000 | 4.900000 | 1.415000 |
50% | 1997-12-07 12:00:00 | 1384.850000 | 8765.907000 | 5.800000 | 5.020000 |
75% | 2011-05-09 18:00:00 | 3010.600000 | 15351.448000 | 7.200000 | 6.810000 |
max | 2024-10-09 00:00:00 | 18647.450000 | 29016.714000 | 14.800000 | 19.100000 |
std | NaN | 3869.583090 | 7333.352008 | 1.721738 | 3.912594 |
data.dtypes
DATE datetime64[ns] 10YrTsy object NASDAQ Composite float64 GDP float64 Inflation object UnemploymentRate float64 FFR float64 dtype: object
data['10YrTsy'] = pd.to_numeric(data['10YrTsy'], errors='coerce')
data['Inflation'] = pd.to_numeric(data['Inflation'], errors='coerce')
data.dtypes
DATE datetime64[ns] 10YrTsy float64 NASDAQ Composite float64 GDP float64 Inflation float64 UnemploymentRate float64 FFR float64 dtype: object
data['DATE'] = pd.to_datetime(data['DATE'], format='%Y-%m-%d')
data = data[data['DATE'] >= pd.to_datetime('2014-12-31')]
data = data.ffill()
data = data.iloc[1:]
data.set_index("DATE", inplace = True)
data
10YrTsy | NASDAQ Composite | GDP | Inflation | UnemploymentRate | FFR | |
---|---|---|---|---|---|---|
DATE | ||||||
2015-01-01 | 2.17 | 4736.05 | 18063.529 | 1.68 | 5.7 | 0.11 |
2015-01-02 | 2.12 | 4726.81 | 18063.529 | 1.71 | 5.7 | 0.11 |
2015-01-03 | 2.12 | 4652.57 | 18063.529 | 1.71 | 5.7 | 0.11 |
2015-01-04 | 2.12 | 4652.57 | 18063.529 | 1.71 | 5.7 | 0.11 |
2015-01-05 | 2.04 | 4652.57 | 18063.529 | 1.64 | 5.7 | 0.11 |
... | ... | ... | ... | ... | ... | ... |
2024-10-05 | 3.98 | 18137.85 | 29016.714 | 2.23 | 4.0 | 5.13 |
2024-10-06 | 3.98 | 18137.85 | 29016.714 | 2.23 | 4.0 | 5.13 |
2024-10-07 | 4.03 | 17923.90 | 29016.714 | 2.27 | 4.0 | 5.13 |
2024-10-08 | 4.04 | 18182.92 | 29016.714 | 2.27 | 4.0 | 5.13 |
2024-10-09 | 4.04 | 18291.62 | 29016.714 | 2.29 | 4.0 | 5.13 |
3570 rows × 6 columns
data.isnull().sum()
10YrTsy 0 NASDAQ Composite 0 GDP 0 Inflation 0 UnemploymentRate 0 FFR 0 dtype: int64
fig, ax1 = plt.subplots(figsize=(30, 15))
ax1.set_facecolor('black')
ax2 = ax1.twinx()
ax2.set_facecolor('black')
ax1.plot(data.index, data['NASDAQ Composite'], label='NASDAQ Composite', color='b')
ax1.plot(data.index, data['GDP'], label='GDP', color='r')
ax1.set_xlabel('Date', fontsize=20)
ax1.set_ylabel('Economic Indicators', fontsize=20)
ax2.plot(data.index, data['FFR'], label='FFR', color='orange', linestyle='--')
ax2.plot(data.index, data['UnemploymentRate'], label='Unemployment Rate', color='m')
ax2.plot(data.index, data['Inflation'], label='Inflation', color='yellow')
ax2.plot(data.index, data['10YrTsy'], label='10YrTsy', color='g')
ax2.set_ylabel('Economic Indicators', fontsize=20)
ax1.tick_params(axis='x', colors='white', labelsize=18)
ax1.tick_params(axis='y', colors='white', labelsize=18)
ax2.tick_params(axis='y', colors='white', labelsize=18)
ax1.legend(loc='upper left', fontsize=18)
ax2.legend(loc='upper right', fontsize=18)
plt.title('Economic Indicators', fontsize=25, color='white')
plt.xticks(rotation=45, color='white')
plt.gcf().set_facecolor('black')
plt.tight_layout()
plt.show()
Analysis¶
The Federal Reserve implemented rate cuts in response to different economic conditions: a drastic cut of 150 basis points on March 16, 2020, due to the COVID-19 pandemic, and a more moderate cut of 50 basis points on September 18, 2024, to support ongoing economic growth. By examining key economic indicators—NASDAQ Composite, Unemployment Rate, Inflation, 10-Year Treasury Yield, and GDP—around these dates, we can observe how the market responded differently to these cuts under contrasting circumstances.
rate_cut_date_2020 = pd.to_datetime('2020-03-16')
rate_cut_date_2024 = pd.to_datetime('2024-09-18')
window_days = 15
pre_2020 = data[(data.index >= rate_cut_date_2020 - pd.Timedelta(days=window_days)) &
(data.index < rate_cut_date_2020)]
post_2020 = data[(data.index > rate_cut_date_2020) &
(data.index <= rate_cut_date_2020 + pd.Timedelta(days=window_days))]
pre_2024 = data[(data.index >= rate_cut_date_2024 - pd.Timedelta(days=window_days)) &
(data.index < rate_cut_date_2024)]
post_2024 = data[(data.index > rate_cut_date_2024) &
(data.index <= rate_cut_date_2024 + pd.Timedelta(days=window_days))]
Economic Indicators¶
rate_cut_date_2020 = pd.to_datetime('2020-03-16')
rate_cut_date_2024 = pd.to_datetime('2024-09-18')
def plot_indicators(data, rate_cut_dates, window_days=30):
fig, axs = plt.subplots(5, len(rate_cut_dates), figsize=(14, 16), sharex=False)
fig.suptitle('Economic Indicators Around Rate Cuts', fontsize=16, color='white')
fig.patch.set_facecolor('black')
for ax_row in axs:
for ax in ax_row:
ax.set_facecolor('black')
ax.tick_params(axis='x', colors='white')
ax.tick_params(axis='y', colors='white')
ax.spines['bottom'].set_color('white')
ax.spines['top'].set_color('white')
ax.spines['right'].set_color('white')
ax.spines['left'].set_color('white')
for i, rate_cut_date in enumerate(rate_cut_dates):
start_date = rate_cut_date - timedelta(days=window_days)
end_date = rate_cut_date + timedelta(days=window_days)
data_window = data[(data.index >= start_date) & (data.index <= end_date)]
axs[0, i].plot(data_window.index, data_window['NASDAQ Composite'], marker='o', color='green', label='NASDAQ Composite')
axs[0, i].axvline(rate_cut_date, color='red', linestyle='--', label='Rate Cut')
axs[0, i].set_ylabel('NASDAQ Composite', color='white')
axs[0, i].set_title(f'Rate Cut on {rate_cut_date.date()}', color='white')
axs[0, i].legend(facecolor='white', edgecolor='white')
axs[1, i].plot(data_window.index, data_window['UnemploymentRate'], marker='o', color='purple', label='Unemployment Rate')
axs[1, i].axvline(rate_cut_date, color='red', linestyle='--')
axs[1, i].set_ylabel('Unemployment Rate (%)', color='white')
axs[1, i].legend(facecolor='white', edgecolor='white')
axs[2, i].plot(data_window.index, data_window['Inflation'], marker='o', color='orange', label='Inflation')
axs[2, i].axvline(rate_cut_date, color='red', linestyle='--')
axs[2, i].set_ylabel('Inflation (%)', color='white')
axs[2, i].legend(facecolor='white', edgecolor='white')
axs[3, i].plot(data_window.index, data_window['10YrTsy'], marker='o', color='blue', label='10YrTsy')
axs[3, i].axvline(rate_cut_date, color='red', linestyle='--')
axs[3, i].set_ylabel('10-Year Treasury (%)', color='white')
axs[3, i].legend(facecolor='white', edgecolor='white')
axs[4, i].plot(data_window.index, data_window['GDP'], marker='o', color='brown', label='GDP')
axs[4, i].axvline(rate_cut_date, color='red', linestyle='--')
axs[4, i].set_ylabel('GDP', color='white')
axs[4, i].set_xlabel('Date', color='white')
axs[4, i].legend(facecolor='white', edgecolor='white')
for ax in axs[:, i]:
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
ax.tick_params(axis='x', rotation=45, colors='white')
ax.xaxis.label.set_color('white')
ax.yaxis.label.set_color('white')
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
plt.show()
plot_indicators(data, [rate_cut_date_2020, rate_cut_date_2024])
NASDAQ Composite
- 2020 Rate Cut: The NASDAQ Composite experienced a significant drop initially following the 2020 rate cut, reflecting the panic and uncertainty as the pandemic unfolded. The sharp declines illustrate the rapid sell-off that occurred as investors sought safer assets. Although the rate cut was intended to boost confidence, the NASDAQ remained volatile due to the broader market downturn and economic uncertainty.
- 2024 Rate Cut: The NASDAQ responded with a mild positive reaction to the September 2024 rate cut, signaling a more stable or even optimistic environment. This suggests that the market may have anticipated the rate cut or was reassured by it, interpreting the move as a proactive measure to sustain growth. Unlike in 2020, there was no immediate crisis, and the market reaction was calm, highlighting the less drastic impact of a 50-basis-point cut in a relatively stable economy.
Unemployment Rate
- 2020 Rate Cut: The unemployment rate saw a dramatic increase following the 2020 rate cut, a direct consequence of the pandemic’s impact on businesses and employment. With lockdowns and social distancing measures in place, businesses faced unprecedented operational challenges, resulting in widespread layoffs. The Fed’s decision to cut rates was part of a broader effort to stabilize the economy and support recovery.
- 2024 Rate Cut: The unemployment rate remained steady around the 2024 rate cut, indicating a more resilient labor market. The stability suggests that this rate cut was not responding to a sudden shock in employment but was instead a strategic move to support the economy amidst other conditions, such as potential inflationary pressures or slower-than-expected growth.
Inflation Rate
- 2020 Rate Cut: In 2020, inflation trended downward as demand plummeted in the wake of COVID-19. The rate cut, along with other fiscal stimulus measures, aimed to counteract deflationary pressures and stimulate spending. However, inflation remained subdued, underscoring the challenges of reviving demand in an environment marked by uncertainty.
- 2024 Rate Cut: Inflation was on an upward trend around the 2024 rate cut, suggesting that inflationary pressures were emerging. The Fed’s intervention may have aimed to manage these pressures without allowing inflation to spiral. This contrasts with the deflationary environment of 2020, indicating that the 2024 rate cut may have been more about fine-tuning growth and inflation rather than stimulating a stagnant economy.
10-Year Treasury Yield
- 2020 Rate Cut: The 10-year Treasury yield dropped sharply following the 2020 rate cut, reflecting a flight to safety as investors moved into bonds amidst the pandemic’s economic fallout. This decline was a clear signal of risk aversion, as investors sought secure returns over volatile equities. The low yields further underscore the subdued economic outlook at the time.
- 2024 Rate Cut: In 2024, the 10-year Treasury yield showed more resilience, with a gradual increase following the rate cut. This suggests investor confidence in future economic growth or potential inflation, which contrasts with the 2020 trend. The higher yields imply that the market may have been expecting steady or rising inflation, leading investors to demand higher returns on longer-term investments.
GDP
- 2020 Rate Cut: GDP data around the 2020 rate cut reveals a significant decline, illustrating the impact of pandemic-related shutdowns and reduced economic activity. The rate cut aimed to prevent further contraction, supporting businesses and consumers through lower borrowing costs. Despite these efforts, GDP growth remained challenged by the extraordinary circumstances.
- 2024 Rate Cut: In contrast, GDP around the 2024 rate cut remained stable, indicating that there was no immediate downturn in economic output. This stability suggests that the 2024 rate cut was intended to sustain economic momentum rather than reverse a contraction. The steady GDP level reflects ongoing economic growth, albeit possibly at a slower pace, with the Fed using rate cuts to provide a mild boost to sustain expansion.
Correlation Analysis¶
data.index = pd.to_datetime(data.index)
corr_matrix = data.corr()
fig, ax = plt.subplots(figsize=(10, 8))
fig.patch.set_facecolor('black')
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', ax=ax, cbar=True)
ax.set_title('Correlation Heatmap', color='white')
ax.tick_params(colors='white')
for spine in ax.spines.values():
spine.set_edgecolor('white')
plt.setp(ax.get_xticklabels(), rotation=45, ha="right", color='white')
plt.setp(ax.get_yticklabels(), rotation=0, color='white')
plt.tight_layout()
plt.show()
Economic Growth and the Stock Market: The strong positive correlation between GDP and the NASDAQ Composite suggests that stock market performance is closely tied to economic growth. As GDP rises, so does investor confidence, which tends to boost stock prices.
Inflation and Unemployment: The negative correlation between inflation and the unemployment rate reflects the traditional Phillips Curve theory. According to this theory, there is an inverse relationship between inflation and unemployment in the short run. When inflation rises, it usually signals an economy with strong demand, prompting businesses to hire more workers, which lowers unemployment. Conversely, when inflation is low, it may indicate weaker demand, leading to higher unemployment as businesses scale back hiring. This theory aligns with the observed data, where periods of higher inflation are associated with lower unemployment rates.
Federal Funds Rate and Treasury Yields: The strong positive correlation between the Federal Funds Rate (FFR) and the 10-Year Treasury Yield indicates that changes in the Fed's rate-setting policies directly influence long-term interest rates. As the Fed raises or lowers the FFR, Treasury yields tend to follow, impacting borrowing costs across the economy, which in turn affects investment decisions and economic growth.
Mixed Impact of Fed Rates on the NASDAQ: The moderate positive correlation between the FFR and the NASDAQ Composite suggests that rate changes by the Fed do influence investor behavior, though not as strongly as economic growth does. While lower interest rates generally stimulate investment in stocks, other factors, such as GDP growth and inflation expectations, play a more significant role in driving stock market performance.
Pre- and Post-Rate Cut Comparisons¶
def mann_whitney_test(pre_data, post_data, indicator):
u_stat, p_value = stats.mannwhitneyu(pre_data[indicator], post_data[indicator], alternative='two-sided')
return u_stat, p_value
indicators = ['NASDAQ Composite', 'Inflation', 'UnemploymentRate', '10YrTsy', 'GDP']
results = []
for indicator in indicators:
u_stat_2020, p_value_2020 = mann_whitney_test(pre_2020, post_2020, indicator)
u_stat_2024, p_value_2024 = mann_whitney_test(pre_2024, post_2024, indicator)
results.append({
'U-stat 2020': u_stat_2020,
'p-value 2020': p_value_2020,
'U-stat 2024': u_stat_2024,
'p-value 2024': p_value_2024
})
results_df = pd.DataFrame(results, index=indicators)
print(results_df)
U-stat 2020 p-value 2020 U-stat 2024 p-value 2024 NASDAQ Composite 194.0 0.000766 0.0 0.000003 Inflation 190.0 0.001372 0.0 0.000003 UnemploymentRate 112.5 1.000000 135.0 0.079231 10YrTsy 133.5 0.393628 26.0 0.000336 GDP 112.5 1.000000 112.5 1.000000
- NASDAQ Composite
- Inference: A low U-statistic and very low p-value indicate that the NASDAQ Composite experienced a significant change after the rate cuts in both 2020 and 2024.
- Reaction: The NASDAQ Composite, which includes many tech and growth stocks, responded strongly to the rate cuts. Lower interest rates make borrowing cheaper, which benefits growth companies that depend on future earnings. Investors likely anticipated better conditions for these companies, leading to increased buying and higher stock values.
- Inflation
- Inference: The low U-statistic and very low p-value suggest a noticeable change in inflation rates following both rate cuts.
- Reaction: Inflation rates shifted significantly as rate cuts often lead to increased spending. When borrowing is more affordable, consumers and businesses tend to spend more, which can raise prices. This quick response in inflation expectations shows that rate cuts can directly influence price levels in the short term.
- Unemployment Rate
- Inference: A high U-statistic and high p-value indicate that the unemployment rate saw little to no significant change after the rate cuts.
- Reaction: The unemployment rate barely reacted to the rate cuts, which aligns with its usual behavior. Employment levels don’t change immediately when interest rates drop, as companies take time to adjust hiring plans. This means that any effects on unemployment from rate cuts are generally seen over a longer period.
- 10-Year Treasury Yield
- Inference: In 2024, the low U-statistic and low p-value show a clear change in the 10-Year Treasury yield, while in 2020, there was no significant reaction.
- Reaction: The 10-Year Treasury yield reacted strongly to the 2024 rate cut, reflecting changes in investor expectations for future growth and inflation. Treasury yields are sensitive to rate cuts because they affect borrowing costs and signal long-term economic trends. The stronger response in 2024 compared to 2020 may be due to differences in the economic context during these periods.
- GDP
- Inference: High U-statistic and high p-value suggest no immediate, significant change in GDP after the rate cuts.
- Reaction: GDP showed stability following both rate cuts, as it typically does not react immediately to changes in interest rates. GDP measures overall economic activity, which takes longer to adjust. Therefore, any effects from the rate cuts on GDP would likely be visible only over an extended period.
Volatility Analysis¶
indicators = ['NASDAQ Composite', 'Inflation', 'UnemploymentRate', '10YrTsy', 'GDP']
std_results = []
for indicator in indicators:
std_pre_2020 = pre_2020[indicator].std()
std_post_2020 = post_2020[indicator].std()
std_pre_2024 = pre_2024[indicator].std()
std_post_2024 = post_2024[indicator].std()
std_results.append({
'Indicator': indicator,
'Std Pre-2020': std_pre_2020,
'Std Post-2020': std_post_2020,
'Std Pre-2024': std_pre_2024,
'Std Post-2024': std_post_2024
})
std_df = pd.DataFrame(std_results)
print(std_df)
Indicator Std Pre-2020 Std Post-2020 Std Pre-2024 Std Post-2024 0 NASDAQ Composite 7.131690e+02 3.778320e+02 3.406476e+02 1.003116e+02 1 Inflation 2.353680e-01 1.680334e-01 3.207135e-02 2.186539e-02 2 UnemploymentRate 0.000000e+00 0.000000e+00 9.193520e-16 4.140393e-02 3 10YrTsy 1.592034e-01 1.530484e-01 5.603570e-02 3.589668e-02 4 GDP 3.765666e-12 3.765666e-12 7.531332e-12 7.531332e-12
- NASDAQ Composite
- The NASDAQ Composite showed a noticeable increase in standard deviation after both rate cuts, signaling a rise in volatility. This aligns with expectations, as lower interest rates typically have a direct impact on growth stocks, which are sensitive to borrowing costs and future earnings. The increased post-rate cut volatility suggests that investor sentiment became more reactive, potentially due to adjustments in growth expectations and risk appetite.
- The NASDAQ Composite showed a noticeable increase in standard deviation after both rate cuts, signaling a rise in volatility. This aligns with expectations, as lower interest rates typically have a direct impact on growth stocks, which are sensitive to borrowing costs and future earnings. The increased post-rate cut volatility suggests that investor sentiment became more reactive, potentially due to adjustments in growth expectations and risk appetite.
- Inflation
- Inflation’s standard deviation increased significantly post-rate cut, especially in 2024. This rise in variability indicates heightened uncertainty regarding future price levels. Following the rate cuts, market participants likely anticipated shifts in demand, as lower interest rates can fuel spending. The post-cut volatility suggests that expectations around price stability were in flux, reflecting potential concerns about inflationary pressures in response to easier monetary policy.
- Inflation’s standard deviation increased significantly post-rate cut, especially in 2024. This rise in variability indicates heightened uncertainty regarding future price levels. Following the rate cuts, market participants likely anticipated shifts in demand, as lower interest rates can fuel spending. The post-cut volatility suggests that expectations around price stability were in flux, reflecting potential concerns about inflationary pressures in response to easier monetary policy.
- Unemployment Rate
- The standard deviation of the unemployment rate showed minimal change between the pre- and post-rate cut periods, with little difference in volatility. This stability aligns with the nature of the unemployment rate as a less reactive indicator in the immediate term. Employment levels generally respond more gradually to monetary policy changes, which means that the volatility in unemployment is less affected by rate cuts and instead reflects longer-term economic adjustments.
- The standard deviation of the unemployment rate showed minimal change between the pre- and post-rate cut periods, with little difference in volatility. This stability aligns with the nature of the unemployment rate as a less reactive indicator in the immediate term. Employment levels generally respond more gradually to monetary policy changes, which means that the volatility in unemployment is less affected by rate cuts and instead reflects longer-term economic adjustments.
- 10-Year Treasury Yield
- The 10-Year Treasury Yield exhibited an increase in standard deviation post-2024 rate cut, while the change was more modest in 2020. This indicates that long-term interest rate expectations became more uncertain following the 2024 cut. Treasury yields are influenced by investor perceptions of economic stability and inflation, and the higher post-cut volatility suggests that the 2024 rate adjustment introduced uncertainty regarding future economic conditions. Investors may have been recalibrating their expectations for long-term growth and inflation based on the Fed’s actions.
- The 10-Year Treasury Yield exhibited an increase in standard deviation post-2024 rate cut, while the change was more modest in 2020. This indicates that long-term interest rate expectations became more uncertain following the 2024 cut. Treasury yields are influenced by investor perceptions of economic stability and inflation, and the higher post-cut volatility suggests that the 2024 rate adjustment introduced uncertainty regarding future economic conditions. Investors may have been recalibrating their expectations for long-term growth and inflation based on the Fed’s actions.
- GDP
- GDP’s standard deviation remained relatively stable, with no notable increase in volatility after either rate cut. This outcome is consistent with GDP’s role as a broad measure of economic output that responds to cumulative changes over time rather than sudden monetary policy shifts. As expected, GDP did not exhibit heightened short-term volatility, indicating that its response to rate cuts is likely more gradual and less sensitive to immediate policy adjustments.
Cumulative Returns¶
nasdaq_pre_2020 = pre_2020['NASDAQ Composite'].pct_change().dropna().add(1).cumprod().reset_index(drop=True).round(2).astype(str) + '%'
nasdaq_post_2020 = post_2020['NASDAQ Composite'].pct_change().dropna().add(1).cumprod().reset_index(drop=True).round(2).astype(str) + '%'
nasdaq_pre_2024 = pre_2024['NASDAQ Composite'].pct_change().dropna().add(1).cumprod().reset_index(drop=True).round(2).astype(str) + '%'
nasdaq_post_2024 = post_2024['NASDAQ Composite'].pct_change().dropna().add(1).cumprod().reset_index(drop=True).round(2).astype(str) + '%'
cumulative_returns = pd.DataFrame({
'2020PreRateCut': nasdaq_pre_2020,
'2020PostRateCut': nasdaq_post_2020,
'2024PreRateCut': nasdaq_pre_2024,
'2024PostRateCut': nasdaq_post_2024
})
cumulative_returns.index = pd.RangeIndex(start=1, stop=len(cumulative_returns) + 1, step=1)
print(cumulative_returns)
2020PreRateCut 2020PostRateCut 2024PreRateCut 2024PostRateCut 1 1.0% 0.95% 1.0% 1.0% 2 0.97% 0.97% 1.0% 1.0% 3 1.01% 0.94% 0.97% 1.0% 4 0.98% 0.94% 0.99% 1.0% 5 0.96% 0.94% 0.99% 1.0% 6 0.89% 0.94% 0.99% 1.0% 7 0.89% 1.01% 0.99% 1.01% 8 0.89% 1.01% 1.02% 1.01% 9 0.93% 1.06% 1.03% 1.01% 10 0.89% 1.02% 1.03% 1.01% 11 0.8% 1.06% 1.03% 1.01% 12 0.88% 1.06% 1.03% 0.99% 13 0.77% 1.06% 1.03% 1.0% 14 0.77% 1.05% 1.03% 0.99%
- Market Sensitivity and Volatility:
- The NASDAQ Composite exhibited starkly different volatility patterns around each rate cut. In 2020, the market displayed high volatility, with sharp fluctuations before and after the rate cut, reflecting reactive trading and elevated uncertainty driven by the COVID-19 crisis. By contrast, in 2024, cumulative returns were steadier, suggesting that investors had anticipated the rate cut as part of a controlled, strategic adjustment rather than a response to immediate economic distress. This more measured pattern reflects a resilient market less susceptible to short-term shocks, indicating that investors were confident in the Fed’s guidance.
- The NASDAQ Composite exhibited starkly different volatility patterns around each rate cut. In 2020, the market displayed high volatility, with sharp fluctuations before and after the rate cut, reflecting reactive trading and elevated uncertainty driven by the COVID-19 crisis. By contrast, in 2024, cumulative returns were steadier, suggesting that investors had anticipated the rate cut as part of a controlled, strategic adjustment rather than a response to immediate economic distress. This more measured pattern reflects a resilient market less susceptible to short-term shocks, indicating that investors were confident in the Fed’s guidance.
- Investor Confidence and Expectations:
- Investor confidence and market sentiment were more fragile in 2020, with cumulative returns showing reactive dips and temporary recoveries that hinted at underlying economic fears. This behavior indicates that the rate cut alone was insufficient to fully restore confidence, as investors anticipated further turbulence. However, in 2024, the market exhibited restrained fluctuations and a more strategic stance, implying that investors expected the rate cut as a proactive measure and aligned their outlooks with long-term growth. The steady returns post-2024 rate cut demonstrate the stabilizing effect of clear Fed communication and a positive economic outlook.
- Investor confidence and market sentiment were more fragile in 2020, with cumulative returns showing reactive dips and temporary recoveries that hinted at underlying economic fears. This behavior indicates that the rate cut alone was insufficient to fully restore confidence, as investors anticipated further turbulence. However, in 2024, the market exhibited restrained fluctuations and a more strategic stance, implying that investors expected the rate cut as a proactive measure and aligned their outlooks with long-term growth. The steady returns post-2024 rate cut demonstrate the stabilizing effect of clear Fed communication and a positive economic outlook.
- Monetary Policy Influence on Market Dynamics:
- The contrasting reactions underscore the varying influence of monetary policy in different economic climates. In 2020, the rate cut’s impact was amplified by the crisis atmosphere, driving immediate yet inconsistent market responses that reflected the limitations of isolated monetary actions during extreme volatility. This response highlights the need for coordinated fiscal and policy measures to reassure markets in times of crisis. Conversely, in 2024, the rate cut was absorbed more smoothly into market expectations, underscoring how, in stable conditions, monetary policy adjustments can support investor confidence and reinforce stability without causing drastic shifts. This demonstrates the value of predictable Fed actions and the importance of aligning rate cuts with broader economic strategies.
Conclusion¶
The analysis of the 2020 and 2024 Federal Reserve rate cuts reveals how significantly monetary policy shapes investor sentiment, depending on the broader economic landscape. In 2020, the aggressive rate cut aimed to restore confidence amidst the economic turmoil of COVID-19; however, initial investor sentiment was dominated by fear and caution, leading to rapid sell-offs as uncertainty permeated the market. The effect of the rate cut, though initially muted, became more pronounced over time, boosting confidence gradually as the pandemic’s impact stabilized. By contrast, the 2024 rate cut generated a more measured and optimistic response, with investors viewing it as a proactive move in a stable economy—reinforcing their trust in the Fed’s commitment to fostering steady growth. This comparison underscores that while Fed rate cuts are a powerful tool in influencing investor sentiment, their immediate impact is deeply shaped by the surrounding economic context. Investors' responses are not just reactions to the policy itself but reflections of their broader expectations and market outlook, making the timing and context of rate cuts essential in shaping economic outcomes.