File size: 11,713 Bytes
26a8ea5
 
 
 
 
 
 
 
 
 
 
 
 
2469150
 
26a8ea5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
#!/usr/bin/env python3
"""
Comprehensive Economic Analytics Demo
Demonstrates advanced analytics capabilities including forecasting, segmentation, and statistical modeling
"""

import logging
import os
import sys
from datetime import datetime
from pathlib import Path

# Add src to path
project_root = Path(__file__).parent.parent
sys.path.append(str(project_root))

from src.analysis.comprehensive_analytics import ComprehensiveAnalytics
from src.core.enhanced_fred_client import EnhancedFREDClient
from config.settings import FRED_API_KEY

def setup_logging():
    """Setup logging for demo"""
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    )

def run_basic_demo():
    """Run basic demo with key economic indicators"""
    print("=" * 80)
    print("ECONOMIC ANALYTICS DEMO - BASIC ANALYSIS")
    print("=" * 80)
    
    # Initialize client
    client = EnhancedFREDClient(FRED_API_KEY)
    
    # Fetch data for key indicators
    indicators = ['GDPC1', 'INDPRO', 'RSAFS']
    print(f"\n๐Ÿ“Š Fetching data for indicators: {indicators}")
    
    try:
        data = client.fetch_economic_data(
            indicators=indicators,
            start_date='2010-01-01',
            end_date='2024-01-01'
        )
        
        print(f"โœ… Successfully fetched {len(data)} observations")
        print(f"๐Ÿ“… Date range: {data.index.min().strftime('%Y-%m')} to {data.index.max().strftime('%Y-%m')}")
        
        # Data quality report
        quality_report = client.validate_data_quality(data)
        print(f"\n๐Ÿ“ˆ Data Quality Summary:")
        for series, metrics in quality_report['missing_data'].items():
            print(f"  โ€ข {series}: {metrics['completeness']:.1f}% complete")
        
        return data
        
    except Exception as e:
        print(f"โŒ Error fetching data: {e}")
        return None

def run_forecasting_demo(data):
    """Run forecasting demo"""
    print("\n" + "=" * 80)
    print("FORECASTING DEMO")
    print("=" * 80)
    
    from src.analysis.economic_forecasting import EconomicForecaster
    
    forecaster = EconomicForecaster(data)
    
    # Forecast key indicators
    indicators = ['GDPC1', 'INDPRO', 'RSAFS']
    available_indicators = [ind for ind in indicators if ind in data.columns]
    
    print(f"๐Ÿ”ฎ Forecasting indicators: {available_indicators}")
    
    for indicator in available_indicators:
        try:
            # Prepare data
            series = forecaster.prepare_data(indicator)
            
            # Check stationarity
            stationarity = forecaster.check_stationarity(series)
            print(f"\n๐Ÿ“Š {indicator} Stationarity Test:")
            print(f"  โ€ข ADF Statistic: {stationarity['adf_statistic']:.4f}")
            print(f"  โ€ข P-value: {stationarity['p_value']:.4f}")
            print(f"  โ€ข Is Stationary: {stationarity['is_stationary']}")
            
            # Generate forecast
            forecast_result = forecaster.forecast_series(series, forecast_periods=4)
            print(f"๐Ÿ”ฎ {indicator} Forecast:")
            print(f"  โ€ข Model: {forecast_result['model_type'].upper()}")
            if forecast_result['aic']:
                print(f"  โ€ข AIC: {forecast_result['aic']:.4f}")
            
            # Backtest
            backtest_result = forecaster.backtest_forecast(series)
            if 'error' not in backtest_result:
                print(f"  โ€ข Backtest MAPE: {backtest_result['mape']:.2f}%")
                print(f"  โ€ข Backtest RMSE: {backtest_result['rmse']:.4f}")
            
        except Exception as e:
            print(f"โŒ Error forecasting {indicator}: {e}")

def run_segmentation_demo(data):
    """Run segmentation demo"""
    print("\n" + "=" * 80)
    print("SEGMENTATION DEMO")
    print("=" * 80)
    
    from src.analysis.economic_segmentation import EconomicSegmentation
    
    segmentation = EconomicSegmentation(data)
    
    # Time period clustering
    print("๐ŸŽฏ Clustering time periods...")
    try:
        time_clusters = segmentation.cluster_time_periods(
            indicators=['GDPC1', 'INDPRO', 'RSAFS'],
            method='kmeans'
        )
        
        if 'error' not in time_clusters:
            n_clusters = time_clusters['n_clusters']
            print(f"โœ… Time periods clustered into {n_clusters} economic regimes")
            
            # Show cluster analysis
            cluster_analysis = time_clusters['cluster_analysis']
            for cluster_id, analysis in cluster_analysis.items():
                print(f"  โ€ข Cluster {cluster_id}: {analysis['size']} periods ({analysis['percentage']:.1f}%)")
        
    except Exception as e:
        print(f"โŒ Error in time period clustering: {e}")
    
    # Series clustering
    print("\n๐ŸŽฏ Clustering economic series...")
    try:
        series_clusters = segmentation.cluster_economic_series(
            indicators=['GDPC1', 'INDPRO', 'RSAFS', 'CPIAUCSL', 'FEDFUNDS', 'DGS10'],
            method='kmeans'
        )
        
        if 'error' not in series_clusters:
            n_clusters = series_clusters['n_clusters']
            print(f"โœ… Economic series clustered into {n_clusters} groups")
            
            # Show cluster analysis
            cluster_analysis = series_clusters['cluster_analysis']
            for cluster_id, analysis in cluster_analysis.items():
                print(f"  โ€ข Cluster {cluster_id}: {analysis['size']} series ({analysis['percentage']:.1f}%)")
        
    except Exception as e:
        print(f"โŒ Error in series clustering: {e}")

def run_statistical_demo(data):
    """Run statistical modeling demo"""
    print("\n" + "=" * 80)
    print("STATISTICAL MODELING DEMO")
    print("=" * 80)
    
    from src.analysis.statistical_modeling import StatisticalModeling
    
    modeling = StatisticalModeling(data)
    
    # Correlation analysis
    print("๐Ÿ“Š Performing correlation analysis...")
    try:
        corr_results = modeling.analyze_correlations()
        significant_correlations = corr_results['significant_correlations']
        print(f"โœ… Found {len(significant_correlations)} significant correlations")
        
        # Show top correlations
        print("\n๐Ÿ”— Top 3 Strongest Correlations:")
        for i, corr in enumerate(significant_correlations[:3]):
            print(f"  โ€ข {corr['variable1']} โ†” {corr['variable2']}: {corr['correlation']:.3f} ({corr['strength']})")
        
    except Exception as e:
        print(f"โŒ Error in correlation analysis: {e}")
    
    # Regression analysis
    print("\n๐Ÿ“ˆ Performing regression analysis...")
    key_indicators = ['GDPC1', 'INDPRO', 'RSAFS']
    
    for target in key_indicators:
        if target in data.columns:
            try:
                regression_result = modeling.fit_regression_model(
                    target=target,
                    lag_periods=4
                )
                
                performance = regression_result['performance']
                print(f"โœ… {target} Regression Model:")
                print(f"  โ€ข Rยฒ: {performance['r2']:.4f}")
                print(f"  โ€ข RMSE: {performance['rmse']:.4f}")
                print(f"  โ€ข MAE: {performance['mae']:.4f}")
                
                # Show top coefficients
                coefficients = regression_result['coefficients']
                print(f"  โ€ข Top 3 Variables:")
                for i, row in coefficients.head(3).iterrows():
                    print(f"    - {row['variable']}: {row['coefficient']:.4f}")
                
            except Exception as e:
                print(f"โŒ Error in regression for {target}: {e}")

def run_comprehensive_demo():
    """Run comprehensive analytics demo"""
    print("=" * 80)
    print("COMPREHENSIVE ECONOMIC ANALYTICS DEMO")
    print("=" * 80)
    
    # Initialize comprehensive analytics
    analytics = ComprehensiveAnalytics(FRED_API_KEY, output_dir="data/exports/demo")
    
    # Run complete analysis
    print("\n๐Ÿš€ Running comprehensive analysis...")
    try:
        results = analytics.run_complete_analysis(
            indicators=['GDPC1', 'INDPRO', 'RSAFS', 'CPIAUCSL', 'FEDFUNDS', 'DGS10'],
            start_date='2010-01-01',
            end_date='2024-01-01',
            forecast_periods=4,
            include_visualizations=True
        )
        
        print("โœ… Comprehensive analysis completed successfully!")
        
        # Print key insights
        if 'insights' in results:
            insights = results['insights']
            print("\n๐ŸŽฏ KEY INSIGHTS:")
            for finding in insights.get('key_findings', []):
                print(f"  โ€ข {finding}")
        
        # Print forecasting results
        if 'forecasting' in results:
            print("\n๐Ÿ”ฎ FORECASTING RESULTS:")
            forecasting_results = results['forecasting']
            for indicator, result in forecasting_results.items():
                if 'error' not in result:
                    backtest = result.get('backtest', {})
                    if 'error' not in backtest:
                        mape = backtest.get('mape', 0)
                        print(f"  โ€ข {indicator}: MAPE = {mape:.2f}%")
        
        # Print segmentation results
        if 'segmentation' in results:
            print("\n๐ŸŽฏ SEGMENTATION RESULTS:")
            segmentation_results = results['segmentation']
            
            if 'time_period_clusters' in segmentation_results:
                time_clusters = segmentation_results['time_period_clusters']
                if 'error' not in time_clusters:
                    n_clusters = time_clusters.get('n_clusters', 0)
                    print(f"  โ€ข Time periods clustered into {n_clusters} economic regimes")
            
            if 'series_clusters' in segmentation_results:
                series_clusters = segmentation_results['series_clusters']
                if 'error' not in series_clusters:
                    n_clusters = series_clusters.get('n_clusters', 0)
                    print(f"  โ€ข Economic series clustered into {n_clusters} groups")
        
        print(f"\n๐Ÿ“ Results saved to: data/exports/demo")
        
    except Exception as e:
        print(f"โŒ Error in comprehensive analysis: {e}")

def main():
    """Main demo function"""
    setup_logging()
    
    print("๐ŸŽฏ ECONOMIC ANALYTICS DEMO")
    print("This demo showcases advanced analytics capabilities including:")
    print("  โ€ข Economic data collection and quality assessment")
    print("  โ€ข Time series forecasting with ARIMA/ETS models")
    print("  โ€ข Economic segmentation (time periods and series)")
    print("  โ€ข Statistical modeling and correlation analysis")
    print("  โ€ข Comprehensive insights extraction")
    
    # Check if API key is available
    if not FRED_API_KEY:
        print("\nโŒ FRED API key not found. Please set FRED_API_KEY environment variable.")
        return
    
    # Run basic demo
    data = run_basic_demo()
    if data is None:
        return
    
    # Run individual demos
    run_forecasting_demo(data)
    run_segmentation_demo(data)
    run_statistical_demo(data)
    
    # Run comprehensive demo
    run_comprehensive_demo()
    
    print("\n" + "=" * 80)
    print("DEMO COMPLETED!")
    print("=" * 80)
    print("Generated outputs:")
    print("  ๐Ÿ“Š data/exports/demo/ - Comprehensive analysis results")
    print("  ๐Ÿ“ˆ Visualizations and reports")
    print("  ๐Ÿ“‰ Statistical diagnostics")
    print("  ๐Ÿ”ฎ Forecasting results")
    print("  ๐ŸŽฏ Segmentation analysis")

if __name__ == "__main__":
    main()