# Ethiopia Financial Inclusion - Unified Data Format v2
## Key Design Principle
**Don't force interpretation onto data.**
The previous version made a mistake: it assigned events to pillars (e.g., "Telebirr Launch" → USAGE). This is **biased** because:
- Telebirr affects both ACCESS and USAGE
- Fayda affects ACCESS, GENDER, and TRUST
- The pillar assignment is an **interpretation**, not a fact
## The Correct Approach
| Record Type | `category` column | `pillar` column |
|-------------|-------------------|-----------------|
| `observation` | (empty) | **YES** - what dimension is measured |
| `target` | (empty) | **YES** - what dimension is the goal |
| `event` | **Event type** (policy, product_launch, etc.) | **(empty)** - no pre-assignment |
| `impact_link` | (empty) | **YES** - pillar of the affected indicator |
---
## How It Works
### Events are neutral
```csv
EVT_0001,,event,product_launch,,Telebirr Launch,...
```
- `category` = what type of event (product_launch)
- `pillar` = empty (no pre-interpretation)
### Impact links capture effects
```csv
IMP_0001,EVT_0001,impact_link,,ACCESS,...,ACC_OWNERSHIP,direct,increase,high,15,12,...
IMP_0003,EVT_0001,impact_link,,USAGE,...,USG_P2P_COUNT,direct,increase,high,25,6,...
```
- One event → multiple impact_links
- Each impact_link has a pillar (derived from the affected indicator)
### Query: "What affects ACCESS?"
```python
# Get all impact_links that affect ACCESS indicators
access_impacts = df[
(df['record_type'] == 'impact_link') &
(df['pillar'] == 'ACCESS')
]
# Join to get event details
access_events = access_impacts.merge(
df[df['record_type'] == 'event'],
left_on='parent_id',
right_on='record_id'
)
```
---
## Event Categories
| category | Description | Examples |
|----------|-------------|----------|
| `product_launch` | New product/service | Telebirr, M-Pesa |
| `market_entry` | New competitor | Safaricom Ethiopia |
| `policy` | Government strategy | NFIS-II |
| `regulation` | Regulatory directive | K …