File size: 4,043 Bytes
9823917
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Data Export Utility for AI Trading Trust Experiment
Run this locally after downloading experiment_data.db from HF Spaces
"""

import sqlite3
import pandas as pd
from pathlib import Path

def export_data(db_path: str = "experiment_data.db", output_dir: str = "exports"):
    """Export all experiment data to CSV files for analysis."""
    
    Path(output_dir).mkdir(exist_ok=True)
    conn = sqlite3.connect(db_path)
    
    # Export participants
    participants_df = pd.read_sql_query("""
        SELECT 
            participant_id,
            session_start,
            session_end,
            final_portfolio_value,
            total_decisions,
            ai_reliance_score,
            completed
        FROM participants
    """, conn)
    participants_df.to_csv(f"{output_dir}/participants.csv", index=False)
    print(f"Exported {len(participants_df)} participants")
    
    # Export decisions
    decisions_df = pd.read_sql_query("""
        SELECT 
            participant_id,
            scenario_id,
            scenario_order,
            timestamp,
            ai_confidence_setting,
            ai_explanation_setting,
            ai_risk_setting,
            ai_advice_direction,
            ai_advice_accuracy,
            decision,
            decision_amount,
            confidence_in_decision,
            response_time_ms,
            scenario_outcome,
            profit_loss,
            portfolio_value_after,
            followed_ai
        FROM decisions
    """, conn)
    decisions_df.to_csv(f"{output_dir}/decisions.csv", index=False)
    print(f"Exported {len(decisions_df)} decisions")
    
    # Create summary statistics
    summary = decisions_df.groupby('participant_id').agg({
        'followed_ai': ['sum', 'count', 'mean'],
        'confidence_in_decision': 'mean',
        'response_time_ms': 'mean',
        'ai_confidence_setting': 'mean',
        'ai_explanation_setting': 'mean',
        'ai_risk_setting': 'mean',
    }).round(2)
    summary.columns = ['_'.join(col).strip() for col in summary.columns]
    summary.to_csv(f"{output_dir}/summary_by_participant.csv")
    print(f"Created summary statistics")
    
    # AI accuracy analysis
    accuracy_analysis = decisions_df.groupby(['ai_advice_accuracy', 'followed_ai']).size().unstack(fill_value=0)
    accuracy_analysis.to_csv(f"{output_dir}/ai_accuracy_analysis.csv")
    print(f"Created AI accuracy analysis")
    
    conn.close()
    print(f"\nAll files exported to {output_dir}/")

def quick_stats(db_path: str = "experiment_data.db"):
    """Print quick statistics from the database."""
    conn = sqlite3.connect(db_path)
    
    # Participant count
    result = pd.read_sql_query("SELECT COUNT(*) as n, SUM(completed) as completed FROM participants", conn)
    print(f"\n=== Quick Stats ===")
    print(f"Total sessions: {result['n'].iloc[0]}")
    print(f"Completed sessions: {result['completed'].iloc[0]}")
    
    # Decision stats
    result = pd.read_sql_query("""
        SELECT 
            AVG(followed_ai) * 100 as ai_follow_rate,
            AVG(confidence_in_decision) as avg_confidence,
            AVG(response_time_ms) / 1000 as avg_response_sec
        FROM decisions
    """, conn)
    print(f"\nAI Follow Rate: {result['ai_follow_rate'].iloc[0]:.1f}%")
    print(f"Avg Confidence: {result['avg_confidence'].iloc[0]:.1f}/100")
    print(f"Avg Response Time: {result['avg_response_sec'].iloc[0]:.1f}s")
    
    # By AI accuracy
    result = pd.read_sql_query("""
        SELECT 
            ai_advice_accuracy,
            AVG(followed_ai) * 100 as follow_rate,
            COUNT(*) as n
        FROM decisions
        GROUP BY ai_advice_accuracy
    """, conn)
    print(f"\nFollow rate by AI accuracy:")
    for _, row in result.iterrows():
        print(f"  {row['ai_advice_accuracy']}: {row['follow_rate']:.1f}% (n={row['n']})")
    
    conn.close()

if __name__ == "__main__":
    import sys
    
    if len(sys.argv) > 1 and sys.argv[1] == "stats":
        quick_stats()
    else:
        export_data()