TradingPlacesv1 / export_data.py
LittleMonkeyLab's picture
Upload 3 files
9823917 verified
"""
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()