File size: 3,592 Bytes
2469150 |
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 |
#!/usr/bin/env python3
"""
Test Mathematical Fixes - Fixed Version
Verify that the corrected unit normalization factors produce accurate data values
"""
import sys
import os
sys.path.insert(0, os.path.abspath('.'))
import pandas as pd
import numpy as np
from src.analysis.mathematical_fixes import MathematicalFixes
def test_mathematical_fixes():
"""Test that mathematical fixes produce correct data values"""
print("๐งช Testing Mathematical Fixes - Fixed Version")
print("=" * 60)
# Create sample data that matches FRED's actual values
dates = pd.date_range('2024-01-01', periods=12, freq='M')
# Sample data with realistic FRED values
sample_data = pd.DataFrame({
'GDPC1': [23500, 23550, 23600, 23650, 23700, 23750, 23800, 23850, 23900, 23950, 24000, 24050], # Billions
'CPIAUCSL': [310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321], # Index ~320
'INDPRO': [110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121], # Index ~110-115
'FEDFUNDS': [4.25, 4.30, 4.35, 4.40, 4.45, 4.50, 4.55, 4.60, 4.65, 4.70, 4.75, 4.80], # Percent ~4.33%
'DGS10': [3.8, 3.9, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9], # Percent ~4.0%
'RSAFS': [700000, 710000, 720000, 730000, 740000, 750000, 760000, 770000, 780000, 790000, 800000, 810000] # Millions
}, index=dates)
print("๐ Original Data (Realistic FRED Values):")
print(sample_data.head())
print()
# Initialize mathematical fixes
math_fixes = MathematicalFixes()
# Apply comprehensive fixes
print("๐ง Applying Mathematical Fixes...")
fixed_data, fix_info = math_fixes.apply_comprehensive_fixes(
sample_data,
target_freq='Q',
growth_method='pct_change',
normalize_units=True
)
print("โ
Fixes Applied:")
for fix in fix_info['fixes_applied']:
print(f" - {fix}")
print()
# Test unit normalization specifically
print("๐งฎ Testing Unit Normalization:")
normalized_data = math_fixes.normalize_units(sample_data)
print("Original vs Normalized Values:")
for col in ['GDPC1', 'CPIAUCSL', 'INDPRO', 'FEDFUNDS', 'DGS10', 'RSAFS']:
if col in sample_data.columns:
original_val = sample_data[col].iloc[-1]
normalized_val = normalized_data[col].iloc[-1]
print(f" {col}: {original_val:,.2f} โ {normalized_val:,.2f}")
print()
# Verify the values are now correct
print("โ
Expected vs Actual Values:")
expected_values = {
'GDPC1': (23500, 24050), # Should be ~$23.5T (in billions)
'CPIAUCSL': (310, 321), # Should be ~320
'INDPRO': (110, 121), # Should be ~110-115
'FEDFUNDS': (4.25, 4.80), # Should be ~4.33%
'DGS10': (3.8, 4.9), # Should be ~4.0%
'RSAFS': (700, 810) # Should be ~$700-900B (in billions)
}
for col, (min_expected, max_expected) in expected_values.items():
if col in normalized_data.columns:
actual_val = normalized_data[col].iloc[-1]
if min_expected <= actual_val <= max_expected:
print(f" โ
{col}: {actual_val:,.2f} (within expected range {min_expected:,.2f}-{max_expected:,.2f})")
else:
print(f" โ {col}: {actual_val:,.2f} (outside expected range {min_expected:,.2f}-{max_expected:,.2f})")
print()
print("๐ฏ Mathematical Fixes Test Complete!")
return fixed_data, fix_info
if __name__ == "__main__":
test_mathematical_fixes() |