dfm-python 0.5.60__tar.gz → 0.6.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. {dfm_python-0.5.60 → dfm_python-0.6.1}/PKG-INFO +1 -1
  2. dfm_python-0.6.1/config/dfm_exchange.yaml +18 -0
  3. dfm_python-0.6.1/config/dfm_finance.yaml +104 -0
  4. {dfm_python-0.5.60 → dfm_python-0.6.1}/config/dfm_macro.yaml +34 -33
  5. dfm_python-0.6.1/data/macro.csv +2539 -0
  6. dfm_python-0.6.1/models/dfm_exchange.pkl +0 -0
  7. dfm_python-0.6.1/models/dfm_macro.pkl +0 -0
  8. {dfm_python-0.5.60 → dfm_python-0.6.1}/pyproject.toml +1 -1
  9. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/config/adapter.py +3 -9
  10. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/config/constants.py +35 -0
  11. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/config/schema/model.py +37 -77
  12. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/dataset/dfm_dataset.py +88 -1
  13. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/encoder/pca.py +3 -0
  14. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/functional/em.py +647 -59
  15. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/models/dfm/dfm.py +141 -15
  16. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/models/dfm/initialization.py +290 -62
  17. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/models/dfm/mixed_freq.py +128 -3
  18. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/models/dfm/tent.py +95 -17
  19. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/numeric/builder.py +5 -2
  20. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/numeric/estimator.py +252 -63
  21. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/numeric/stability.py +234 -6
  22. dfm_python-0.6.1/src/dfm_python/ssm/kalman.py +831 -0
  23. dfm_python-0.6.1/src/test/functional/test_em.py +277 -0
  24. dfm_python-0.6.1/src/test/functional/test_em_correctness.py +506 -0
  25. dfm_python-0.6.1/src/test/functional/test_em_properties.py +151 -0
  26. dfm_python-0.6.1/src/test/functional/test_invariance.py +348 -0
  27. dfm_python-0.6.1/src/test/functional/test_macro_overflow.py +240 -0
  28. dfm_python-0.6.1/src/test/models/test_dfm.py +253 -0
  29. dfm_python-0.6.1/src/test/numeric/test_cov_rowvar_regression.py +22 -0
  30. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/numeric/test_estimator.py +12 -12
  31. dfm_python-0.6.1/src/test/numeric/test_initialization.py +413 -0
  32. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/numeric/test_stability.py +2 -7
  33. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/ssm/test_kalman.py +157 -0
  34. dfm_python-0.6.1/src/test/ssm/test_kalman_correctness.py +174 -0
  35. dfm_python-0.6.1/tutorial/tutorial_exchange_dfm.py +57 -0
  36. dfm_python-0.6.1/tutorial/tutorial_finance_dfm.py +84 -0
  37. dfm_python-0.6.1/tutorial/tutorial_macro_dfm.py +56 -0
  38. {dfm_python-0.5.60 → dfm_python-0.6.1}/uv.lock +1 -1
  39. dfm_python-0.5.60/config/dfm_exchange.yaml +0 -32
  40. dfm_python-0.5.60/config/dfm_finance.yaml +0 -100
  41. dfm_python-0.5.60/data/macro.csv +0 -2539
  42. dfm_python-0.5.60/src/dfm_python/ssm/kalman.py +0 -386
  43. dfm_python-0.5.60/src/test/functional/test_em.py +0 -136
  44. dfm_python-0.5.60/src/test/models/test_dfm.py +0 -92
  45. dfm_python-0.5.60/tutorial/tutorial_exchange_dfm.py +0 -68
  46. dfm_python-0.5.60/tutorial/tutorial_finance_dfm.py +0 -114
  47. dfm_python-0.5.60/tutorial/tutorial_macro_dfm.py +0 -119
  48. {dfm_python-0.5.60 → dfm_python-0.6.1}/.cursor/agents/test-runner.md +0 -0
  49. {dfm_python-0.5.60 → dfm_python-0.6.1}/.git +0 -0
  50. {dfm_python-0.5.60 → dfm_python-0.6.1}/.gitignore +0 -0
  51. {dfm_python-0.5.60 → dfm_python-0.6.1}/.python-version +0 -0
  52. {dfm_python-0.5.60 → dfm_python-0.6.1}/=0.11.0 +0 -0
  53. {dfm_python-0.5.60 → dfm_python-0.6.1}/MANIFEST.in +0 -0
  54. {dfm_python-0.5.60 → dfm_python-0.6.1}/config/ddfm_exchange.yaml +0 -0
  55. {dfm_python-0.5.60 → dfm_python-0.6.1}/config/ddfm_finance.yaml +0 -0
  56. {dfm_python-0.5.60 → dfm_python-0.6.1}/config/ddfm_macro.yaml +0 -0
  57. {dfm_python-0.5.60 → dfm_python-0.6.1}/data/exchange_rate.csv +0 -0
  58. {dfm_python-0.5.60 → dfm_python-0.6.1}/data/finance.csv +0 -0
  59. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/__init__.py +0 -0
  60. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/config/__init__.py +0 -0
  61. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/config/schema/__init__.py +0 -0
  62. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/config/schema/block.py +0 -0
  63. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/config/schema/params.py +0 -0
  64. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/config/schema/results.py +0 -0
  65. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/config/types.py +0 -0
  66. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/dataset/__init__.py +0 -0
  67. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/dataset/ddfm_dataset.py +0 -0
  68. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/dataset/time.py +0 -0
  69. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/decoder/__init__.py +0 -0
  70. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/decoder/base.py +0 -0
  71. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/decoder/linear.py +0 -0
  72. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/decoder/mlp.py +0 -0
  73. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/encoder/__init__.py +0 -0
  74. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/encoder/base.py +0 -0
  75. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/encoder/simple_autoencoder.py +0 -0
  76. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/functional/__init__.py +0 -0
  77. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/logger/__init__.py +0 -0
  78. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/logger/dfm_logger.py +0 -0
  79. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/logger/inference_logger.py +0 -0
  80. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/logger/logger.py +0 -0
  81. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/logger/train_logger.py +0 -0
  82. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/models/__init__.py +0 -0
  83. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/models/base.py +0 -0
  84. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/models/ddfm/ddfm.py +0 -0
  85. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/models/dfm/__init__.py +0 -0
  86. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/numeric/statistic.py +0 -0
  87. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/numeric/validator.py +0 -0
  88. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/ssm/__init__.py +0 -0
  89. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/utils/__init__.py +0 -0
  90. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/utils/checkpoint.py +0 -0
  91. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/utils/errors.py +0 -0
  92. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/utils/helper.py +0 -0
  93. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/utils/loss.py +0 -0
  94. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/utils/metric.py +0 -0
  95. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/utils/misc.py +0 -0
  96. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/dfm_python/utils/validation.py +0 -0
  97. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/__init__.py +0 -0
  98. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/config/__init__.py +0 -0
  99. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/config/schema/__init__.py +0 -0
  100. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/config/schema/test_block.py +0 -0
  101. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/config/schema/test_model.py +0 -0
  102. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/config/schema/test_results.py +0 -0
  103. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/config/test_adapter.py +0 -0
  104. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/config/test_constants.py +0 -0
  105. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/config/test_tent_weights_config.py +0 -0
  106. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/config/test_types.py +0 -0
  107. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/conftest.py +0 -0
  108. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/dataset/test_ddfm_dataset.py +0 -0
  109. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/dataset/test_dfm_dataset.py +0 -0
  110. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/decoder/__init__.py +0 -0
  111. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/decoder/test_linear.py +0 -0
  112. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/decoder/test_mlp.py +0 -0
  113. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/encoder/__init__.py +0 -0
  114. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/encoder/test_base.py +0 -0
  115. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/encoder/test_pca.py +0 -0
  116. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/encoder/test_simple_autoencoder.py +0 -0
  117. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/functional/__init__.py +0 -0
  118. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/logger/__init__.py +0 -0
  119. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/logger/test_inference_logger.py +0 -0
  120. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/logger/test_logger.py +0 -0
  121. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/logger/test_train_logger.py +0 -0
  122. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/models/__init__.py +0 -0
  123. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/models/test_ddfm.py +0 -0
  124. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/numeric/__init__.py +0 -0
  125. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/numeric/test_builder.py +0 -0
  126. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/numeric/test_validator.py +0 -0
  127. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/ssm/__init__.py +0 -0
  128. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/utils/__init__.py +0 -0
  129. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/utils/test_errors.py +0 -0
  130. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/utils/test_helper.py +0 -0
  131. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/utils/test_metric.py +0 -0
  132. {dfm_python-0.5.60 → dfm_python-0.6.1}/src/test/utils/test_misc.py +0 -0
  133. {dfm_python-0.5.60 → dfm_python-0.6.1}/tutorial/tutorial_exchange_ddfm.py +0 -0
  134. {dfm_python-0.5.60 → dfm_python-0.6.1}/tutorial/tutorial_finance_ddfm.py +0 -0
  135. {dfm_python-0.5.60 → dfm_python-0.6.1}/tutorial/tutorial_macro_ddfm.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dfm-python
3
- Version: 0.5.60
3
+ Version: 0.6.1
4
4
  Summary: Dynamic Factor Model (DFM) estimation and forecasting in Python
5
5
  Project-URL: Homepage, https://github.com/yourusername/dfm-python
6
6
  Project-URL: Documentation, https://github.com/yourusername/dfm-python#readme
@@ -0,0 +1,18 @@
1
+ # DFM Configuration for Exchange Rate Datasets
2
+ # Clock: Daily (d) - base frequency for latent factors
3
+ # Data: Daily exchange rate data (all series at same frequency)
4
+
5
+ # EM Algorithm Parameters
6
+ # NOTE: Exchange tutorial is long daily data (T~7.6k). Full EM can take hours.
7
+ # Keep tutorial runs short by capping iterations and loosening convergence.
8
+ threshold: 1.0e-04 # EM convergence threshold (tutorial-friendly)
9
+ max_iter: 50 # Maximum EM iterations (tutorial-friendly)
10
+
11
+ # Data Handling
12
+ clock: d # Daily clock frequency (base frequency for latent factors)
13
+ scaler: standard # Scaler for all series: 'standard', 'robust', 'minmax', 'maxabs', 'quantile', or null
14
+ # Note: scaler is handled internally by the model, not set on config object
15
+ # Note: nan_method and nan_k are internal constants (not user-configurable)
16
+ num_factors: 2 # Number of factors
17
+
18
+
@@ -0,0 +1,104 @@
1
+ # DFM Configuration for Financial Datasets
2
+ # Based on coded financial indicators (D, E, I, M, P, S, V series)
3
+ # Data: 97 series (D1-D9, E1-E20, I1-I9, M1-M18, P1-P13, S1-S12, V1-V13, plus targets)
4
+ # Target: market_forward_excess_returns
5
+ # Excluded: risk_free_rate, forward_returns
6
+ # Reduced series for testing purposes
7
+
8
+ # EM Algorithm Parameters
9
+ threshold: 1.0e-05 # EM convergence threshold
10
+ max_iter: 50 # Maximum EM iterations
11
+
12
+ # Data Handling
13
+ clock: d # Daily clock frequency (finance.csv uses daily index via date_id)
14
+ scaler: standard # Scaler for all series: 'standard', 'robust', 'minmax', 'maxabs', 'quantile', or null
15
+ # Note: scaler is handled internally by the model, not set on config object
16
+ # Note: nan_method and nan_k are internal constants (not user-configurable)
17
+
18
+ # Block Structure for Financial Data (testing configuration)
19
+ # 4 blocks, 2 factors per block (reduced from 3 for faster testing)
20
+ # This still verifies all block mechanisms while reducing state dimension
21
+ blocks:
22
+ Block_ALL:
23
+ num_factors: 2 # Reduced from 3 for faster testing
24
+ series:
25
+ # Contains all series from Block_EI, Block_MD, and Block_PSV
26
+ # From Block_EI:
27
+ - E1
28
+ - E5
29
+ - E10
30
+ - E15
31
+ - E20
32
+ - I1
33
+ - I5
34
+ - I9
35
+ # From Block_MD:
36
+ - M1
37
+ - M5
38
+ - M10
39
+ - M15
40
+ - M18
41
+ - D1
42
+ - D5
43
+ - D9
44
+ # From Block_PSV:
45
+ - P1
46
+ - P5
47
+ - P10
48
+ - P13
49
+ - S1
50
+ - S5
51
+ - S10
52
+ - V1
53
+ - V5
54
+ - V10
55
+ - market_forward_excess_returns
56
+
57
+ Block_EI:
58
+ num_factors: 2 # Reduced from 3 for faster testing
59
+ series:
60
+ # E series: ~6 series
61
+ - E1
62
+ - E5
63
+ - E10
64
+ - E15
65
+ - E20
66
+ # I series: ~4 series
67
+ - I1
68
+ - I5
69
+ - I9
70
+
71
+ Block_MD:
72
+ num_factors: 2 # Reduced from 3 for faster testing
73
+ series:
74
+ # M series: ~6 series
75
+ - M1
76
+ - M5
77
+ - M10
78
+ - M15
79
+ - M18
80
+ # D series: ~4 series
81
+ - D1
82
+ - D5
83
+ - D9
84
+
85
+ Block_PSV:
86
+ num_factors: 2 # Reduced from 3 for faster testing
87
+ series:
88
+ # P series: ~4 series
89
+ - P1
90
+ - P5
91
+ - P10
92
+ - P13
93
+ # S series: ~3 series
94
+ - S1
95
+ - S5
96
+ - S10
97
+ # V series: ~3 series
98
+ - V1
99
+ - V5
100
+ - V10
101
+ - market_forward_excess_returns
102
+
103
+ # Frequency mapping: Not required for single-frequency cases
104
+ # The code will automatically create frequency dict from data columns using clock frequency (d)
@@ -6,7 +6,7 @@
6
6
 
7
7
  # EM Algorithm Parameters
8
8
  threshold: 1.0e-05 # EM convergence threshold
9
- max_iter: 5000 # Maximum EM iterations
9
+ max_iter: 5 # Maximum EM iterations
10
10
 
11
11
  # Numerical Stability Parameters
12
12
  clip_ar_coefficients: true
@@ -27,52 +27,53 @@ scaler: standard # Scaler for all series: 'standard', 'robust', 'minmax', 'maxa
27
27
  # Note: scaler is handled internally by the model, not set on config object
28
28
  # Note: nan_method and nan_k are internal constants (not user-configurable)
29
29
 
30
+ # Tent weights for mixed-frequency aggregation
31
+ # 3-period tent kernel for monthly->weekly aggregation
32
+ tent_weights:
33
+ m:w: [1, 2, 1] # 3-period tent kernel for monthly->weekly aggregation
34
+
30
35
  # Block Structure for Macroeconomic Data
31
- # Simplified for faster testing - reduced to 2 blocks with essential series
32
- # Series can appear in multiple blocks to capture different factor structures
36
+ # Single global block for all series
37
+ # Series order: clock-frequency (weekly) first, then slower-frequency (monthly)
33
38
  blocks:
34
- Block_Real:
35
- num_factors: 2 # Real economy factors (production, employment, consumption, investment)
36
- series:
37
- - KOCONPRCF # Production
38
- - KOEMPTOTO # Total employment
39
- - KOHWRWEMP # Hours worked
40
- - KOWRCCNSE # Consumption
41
- - KOIMPCONA # Investment
42
- Block_Prices_Financial:
43
- num_factors: 2 # Price, financial, and survey factors (combined for testing)
39
+ Block_Global:
40
+ num_factors: 3 # Number of factors for global block
44
41
  series:
45
- - KOCPCOREF # Consumer prices
46
- - KOCPEXFEF # Export prices
47
- - KOWRCCNSE # Consumption (overlap with Block_Real)
48
- - KOCREU..A # Credit
49
- - KOLRLTHH # Interest rates
50
- - KOBSIHAPR # Business survey
51
- - KOCNFCONR # Confidence
42
+ # Weekly series (clock frequency) - must come first
43
+ - KORFBEV # Retail, Food & Beverages (weekly)
44
+ - KORWHLS # Retail, Wholesale (weekly)
45
+ - KORMCMP # Retail, Miscellaneous & Comparison (weekly)
46
+ - KORELEC # Retail, Electronics (weekly)
47
+ - KORCNST # Retail, Construction (weekly)
48
+ - KORMACH # Retail, Machinery (weekly)
49
+ - KOROCOINF # Retail, Other Consumer & Information (weekly)
50
+ # Monthly series (slower than clock) - must come after clock-frequency series
51
+ - KOEMPTOTO # Total employment (monthly)
52
+ - KOHWRWEMP # Hours worked (monthly)
53
+ - KOWRCDURE # Durable goods consumption (monthly)
54
+ - KOCONPRCF # Production (monthly)
55
+ - KOEQUIPTE # Investment, Equipment (monthly, target series)
56
+ - KOWRCCNSE # Consumption (monthly, target series)
57
+ - KOIMPCONA # Investment, Construction (monthly, target series)
52
58
 
53
59
  # Frequency mapping for mixed-frequency macro data
54
60
  # Clock is weekly (w), so monthly series are slower frequency
55
61
  # Grouped format: frequencies are specified as lists grouped by frequency code
56
- # Reduced set for faster testing (~50% reduction: 18 monthly series kept from original ~36)
57
62
  frequency:
58
63
  # Monthly series (slower than weekly clock) - typically end-of-month observations
59
- # Block_Real series
64
+ # These are the series used in the tutorial
60
65
  m:
61
66
  - KOEMPTOTO # Total employment (monthly)
62
67
  - KOHWRWEMP # Hours worked (monthly)
63
- - KOIMPCONA # Investment, Construction (monthly)
64
- - KOWRCCNSE # Consumption (monthly)
68
+ - KOWRCDURE # Durable goods consumption (monthly)
65
69
  - KOCONPRCF # Production (monthly)
66
- # Block_Prices_Financial series
67
- - KOCPCOREF # Consumer prices (monthly)
68
- - KOCPEXFEF # Export prices (monthly)
69
- - KOCREU..A # Credit (monthly)
70
- - KOLRLTHH # Interest rates (monthly)
71
- - KOBSIHAPR # Business survey (monthly)
72
- - KOCNFCONR # Confidence (monthly)
73
- # Target series
74
70
  - KOEQUIPTE # Investment, Equipment (monthly, target series)
75
- # Weekly series (same as clock frequency)
71
+ - KOWRCCNSE # Consumption (monthly, target series)
72
+ - KOIMPCONA # Investment, Construction (monthly, target series)
73
+ # Weekly series (same as clock frequency - these appear every week like the clock)
74
+ # This is a mixed-frequency example: clock is weekly, but monthly series are slower
75
+ # The tutorial now respects YAML frequencies for proper mixed-frequency handling
76
+ # These weekly series are available in the data at clock frequency
76
77
  w:
77
78
  - KORFBEV # Retail, Food & Beverages (weekly)
78
79
  - KORWHLS # Retail, Wholesale (weekly)