Edwin Salguero
Prepare for Streamlit Cloud deployment - Add deployment files, fix clustering chart error, update requirements
6ce20d9
""" | |
FRED ML - Demo Data Generator | |
Provides realistic economic data and senior data scientist insights | |
""" | |
import pandas as pd | |
import numpy as np | |
from datetime import datetime, timedelta | |
import random | |
def generate_economic_data(): | |
"""Generate realistic economic data for demonstration""" | |
# Generate date range (last 5 years) | |
end_date = datetime.now() | |
start_date = end_date - timedelta(days=365*5) | |
dates = pd.date_range(start=start_date, end=end_date, freq='M') | |
# Base values and trends for realistic economic data | |
base_values = { | |
'GDPC1': 20000, # Real GDP in billions | |
'INDPRO': 100, # Industrial Production Index | |
'RSAFS': 500, # Retail Sales in billions | |
'CPIAUCSL': 250, # Consumer Price Index | |
'FEDFUNDS': 2.5, # Federal Funds Rate | |
'DGS10': 3.0, # 10-Year Treasury Rate | |
'UNRATE': 4.0, # Unemployment Rate | |
'PAYEMS': 150000, # Total Nonfarm Payrolls (thousands) | |
'PCE': 18000, # Personal Consumption Expenditures | |
'M2SL': 21000, # M2 Money Stock | |
'TCU': 75, # Capacity Utilization | |
'DEXUSEU': 1.1 # US/Euro Exchange Rate | |
} | |
# Growth rates and volatility for realistic trends | |
growth_rates = { | |
'GDPC1': 0.02, # 2% annual growth | |
'INDPRO': 0.015, # 1.5% annual growth | |
'RSAFS': 0.03, # 3% annual growth | |
'CPIAUCSL': 0.025, # 2.5% annual inflation | |
'FEDFUNDS': 0.0, # Policy rate | |
'DGS10': 0.0, # Market rate | |
'UNRATE': 0.0, # Unemployment | |
'PAYEMS': 0.015, # Employment growth | |
'PCE': 0.025, # Consumption growth | |
'M2SL': 0.04, # Money supply growth | |
'TCU': 0.005, # Capacity utilization | |
'DEXUSEU': 0.0 # Exchange rate | |
} | |
# Generate realistic data | |
data = {'Date': dates} | |
for indicator, base_value in base_values.items(): | |
# Create trend with realistic economic cycles | |
trend = np.linspace(0, len(dates) * growth_rates[indicator], len(dates)) | |
# Add business cycle effects | |
cycle = 0.05 * np.sin(2 * np.pi * np.arange(len(dates)) / 48) # 4-year cycle | |
# Add random noise | |
noise = np.random.normal(0, 0.02, len(dates)) | |
# Combine components | |
values = base_value * (1 + trend + cycle + noise) | |
# Ensure realistic bounds | |
if indicator in ['UNRATE', 'FEDFUNDS', 'DGS10']: | |
values = np.clip(values, 0, 20) | |
elif indicator in ['CPIAUCSL']: | |
values = np.clip(values, 200, 350) | |
elif indicator in ['TCU']: | |
values = np.clip(values, 60, 90) | |
data[indicator] = values | |
return pd.DataFrame(data) | |
def generate_insights(): | |
"""Generate senior data scientist insights""" | |
insights = { | |
'GDPC1': { | |
'current_value': '$21,847.2B', | |
'growth_rate': '+2.1%', | |
'trend': 'Moderate growth', | |
'forecast': '+2.3% next quarter', | |
'key_insight': 'GDP growth remains resilient despite monetary tightening, supported by strong consumer spending and business investment.', | |
'risk_factors': ['Inflation persistence', 'Geopolitical tensions', 'Supply chain disruptions'], | |
'opportunities': ['Technology sector expansion', 'Infrastructure investment', 'Green energy transition'] | |
}, | |
'INDPRO': { | |
'current_value': '102.4', | |
'growth_rate': '+0.8%', | |
'trend': 'Recovery phase', | |
'forecast': '+0.6% next month', | |
'key_insight': 'Industrial production shows signs of recovery, with manufacturing leading the rebound. Capacity utilization improving.', | |
'risk_factors': ['Supply chain bottlenecks', 'Labor shortages', 'Energy price volatility'], | |
'opportunities': ['Advanced manufacturing', 'Automation adoption', 'Reshoring initiatives'] | |
}, | |
'RSAFS': { | |
'current_value': '$579.2B', | |
'growth_rate': '+3.2%', | |
'trend': 'Strong consumer spending', | |
'forecast': '+2.8% next month', | |
'key_insight': 'Retail sales demonstrate robust consumer confidence, with e-commerce continuing to gain market share.', | |
'risk_factors': ['Inflation impact on purchasing power', 'Interest rate sensitivity', 'Supply chain issues'], | |
'opportunities': ['Digital transformation', 'Omnichannel retail', 'Personalization'] | |
}, | |
'CPIAUCSL': { | |
'current_value': '312.3', | |
'growth_rate': '+3.2%', | |
'trend': 'Moderating inflation', | |
'forecast': '+2.9% next month', | |
'key_insight': 'Inflation continues to moderate from peak levels, with core CPI showing signs of stabilization.', | |
'risk_factors': ['Energy price volatility', 'Wage pressure', 'Supply chain costs'], | |
'opportunities': ['Productivity improvements', 'Technology adoption', 'Supply chain optimization'] | |
}, | |
'FEDFUNDS': { | |
'current_value': '5.25%', | |
'growth_rate': '0%', | |
'trend': 'Stable policy rate', | |
'forecast': '5.25% next meeting', | |
'key_insight': 'Federal Reserve maintains restrictive stance to combat inflation, with policy rate at 22-year high.', | |
'risk_factors': ['Inflation persistence', 'Economic slowdown', 'Financial stability'], | |
'opportunities': ['Policy normalization', 'Inflation targeting', 'Financial regulation'] | |
}, | |
'DGS10': { | |
'current_value': '4.12%', | |
'growth_rate': '-0.15%', | |
'trend': 'Declining yields', | |
'forecast': '4.05% next week', | |
'key_insight': '10-year Treasury yields declining on economic uncertainty and flight to quality. Yield curve inversion persists.', | |
'risk_factors': ['Economic recession', 'Inflation expectations', 'Geopolitical risks'], | |
'opportunities': ['Bond market opportunities', 'Portfolio diversification', 'Interest rate hedging'] | |
}, | |
'UNRATE': { | |
'current_value': '3.7%', | |
'growth_rate': '0%', | |
'trend': 'Stable employment', | |
'forecast': '3.6% next month', | |
'key_insight': 'Unemployment rate remains near historic lows, indicating tight labor market conditions.', | |
'risk_factors': ['Labor force participation', 'Skills mismatch', 'Economic slowdown'], | |
'opportunities': ['Workforce development', 'Technology training', 'Remote work adoption'] | |
}, | |
'PAYEMS': { | |
'current_value': '156,847K', | |
'growth_rate': '+1.2%', | |
'trend': 'Steady job growth', | |
'forecast': '+0.8% next month', | |
'key_insight': 'Nonfarm payrolls continue steady growth, with healthcare and technology sectors leading job creation.', | |
'risk_factors': ['Labor shortages', 'Wage pressure', 'Economic uncertainty'], | |
'opportunities': ['Skills development', 'Industry partnerships', 'Immigration policy'] | |
}, | |
'PCE': { | |
'current_value': '$19,847B', | |
'growth_rate': '+2.8%', | |
'trend': 'Strong consumption', | |
'forecast': '+2.5% next quarter', | |
'key_insight': 'Personal consumption expenditures show resilience, supported by strong labor market and wage growth.', | |
'risk_factors': ['Inflation impact', 'Interest rate sensitivity', 'Consumer confidence'], | |
'opportunities': ['Digital commerce', 'Experience economy', 'Sustainable consumption'] | |
}, | |
'M2SL': { | |
'current_value': '$20,847B', | |
'growth_rate': '+2.1%', | |
'trend': 'Moderate growth', | |
'forecast': '+1.8% next month', | |
'key_insight': 'Money supply growth moderating as Federal Reserve tightens monetary policy to combat inflation.', | |
'risk_factors': ['Inflation expectations', 'Financial stability', 'Economic growth'], | |
'opportunities': ['Digital payments', 'Financial innovation', 'Monetary policy'] | |
}, | |
'TCU': { | |
'current_value': '78.4%', | |
'growth_rate': '+0.3%', | |
'trend': 'Improving utilization', | |
'forecast': '78.7% next quarter', | |
'key_insight': 'Capacity utilization improving as supply chain issues resolve and demand remains strong.', | |
'risk_factors': ['Supply chain disruptions', 'Labor shortages', 'Energy constraints'], | |
'opportunities': ['Efficiency improvements', 'Technology adoption', 'Process optimization'] | |
}, | |
'DEXUSEU': { | |
'current_value': '1.087', | |
'growth_rate': '+0.2%', | |
'trend': 'Stable exchange rate', | |
'forecast': '1.085 next week', | |
'key_insight': 'US dollar remains strong against euro, supported by relative economic performance and interest rate differentials.', | |
'risk_factors': ['Economic divergence', 'Geopolitical tensions', 'Trade policies'], | |
'opportunities': ['Currency hedging', 'International trade', 'Investment diversification'] | |
} | |
} | |
return insights | |
def generate_forecast_data(): | |
"""Generate forecast data with confidence intervals""" | |
# Generate future dates (next 4 quarters) | |
last_date = datetime.now() | |
future_dates = pd.date_range(start=last_date + timedelta(days=90), periods=4, freq='Q') | |
forecasts = {} | |
# Realistic forecast scenarios | |
forecast_scenarios = { | |
'GDPC1': {'growth': 0.02, 'volatility': 0.01}, # 2% quarterly growth | |
'INDPRO': {'growth': 0.015, 'volatility': 0.008}, # 1.5% monthly growth | |
'RSAFS': {'growth': 0.025, 'volatility': 0.012}, # 2.5% monthly growth | |
'CPIAUCSL': {'growth': 0.006, 'volatility': 0.003}, # 0.6% monthly inflation | |
'FEDFUNDS': {'growth': 0.0, 'volatility': 0.25}, # Stable policy rate | |
'DGS10': {'growth': -0.001, 'volatility': 0.15}, # Slight decline | |
'UNRATE': {'growth': -0.001, 'volatility': 0.1}, # Slight decline | |
'PAYEMS': {'growth': 0.008, 'volatility': 0.005}, # 0.8% monthly growth | |
'PCE': {'growth': 0.02, 'volatility': 0.01}, # 2% quarterly growth | |
'M2SL': {'growth': 0.015, 'volatility': 0.008}, # 1.5% monthly growth | |
'TCU': {'growth': 0.003, 'volatility': 0.002}, # 0.3% quarterly growth | |
'DEXUSEU': {'growth': -0.001, 'volatility': 0.02} # Slight decline | |
} | |
for indicator, scenario in forecast_scenarios.items(): | |
base_value = 100 # Normalized base value | |
# Generate forecast values | |
forecast_values = [] | |
confidence_intervals = [] | |
for i in range(4): | |
# Add trend and noise | |
value = base_value * (1 + scenario['growth'] * (i + 1) + | |
np.random.normal(0, scenario['volatility'])) | |
# Generate confidence interval | |
lower = value * (1 - 0.05 - np.random.uniform(0, 0.03)) | |
upper = value * (1 + 0.05 + np.random.uniform(0, 0.03)) | |
forecast_values.append(value) | |
confidence_intervals.append({'lower': lower, 'upper': upper}) | |
forecasts[indicator] = { | |
'forecast': forecast_values, | |
'confidence_intervals': pd.DataFrame(confidence_intervals), | |
'dates': future_dates | |
} | |
return forecasts | |
def generate_correlation_matrix(): | |
"""Generate realistic correlation matrix""" | |
# Define realistic correlations between economic indicators | |
correlations = { | |
'GDPC1': {'INDPRO': 0.85, 'RSAFS': 0.78, 'CPIAUCSL': 0.45, 'FEDFUNDS': -0.32, 'DGS10': -0.28}, | |
'INDPRO': {'RSAFS': 0.72, 'CPIAUCSL': 0.38, 'FEDFUNDS': -0.25, 'DGS10': -0.22}, | |
'RSAFS': {'CPIAUCSL': 0.42, 'FEDFUNDS': -0.28, 'DGS10': -0.25}, | |
'CPIAUCSL': {'FEDFUNDS': 0.65, 'DGS10': 0.58}, | |
'FEDFUNDS': {'DGS10': 0.82} | |
} | |
# Create correlation matrix | |
indicators = ['GDPC1', 'INDPRO', 'RSAFS', 'CPIAUCSL', 'FEDFUNDS', 'DGS10', 'UNRATE', 'PAYEMS', 'PCE', 'M2SL', 'TCU', 'DEXUSEU'] | |
corr_matrix = pd.DataFrame(index=indicators, columns=indicators) | |
# Fill diagonal with 1 | |
for indicator in indicators: | |
corr_matrix.loc[indicator, indicator] = 1.0 | |
# Fill with realistic correlations | |
for i, indicator1 in enumerate(indicators): | |
for j, indicator2 in enumerate(indicators): | |
if i != j: | |
if indicator1 in correlations and indicator2 in correlations[indicator1]: | |
corr_matrix.loc[indicator1, indicator2] = correlations[indicator1][indicator2] | |
elif indicator2 in correlations and indicator1 in correlations[indicator2]: | |
corr_matrix.loc[indicator1, indicator2] = correlations[indicator2][indicator1] | |
else: | |
# Generate random correlation between -0.3 and 0.3 | |
corr_matrix.loc[indicator1, indicator2] = np.random.uniform(-0.3, 0.3) | |
return corr_matrix | |
def get_demo_data(): | |
"""Get comprehensive demo data""" | |
return { | |
'economic_data': generate_economic_data(), | |
'insights': generate_insights(), | |
'forecasts': generate_forecast_data(), | |
'correlation_matrix': generate_correlation_matrix() | |
} |