58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
"""反馈统计 API"""
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from sqlalchemy.future import select
|
|
|
|
from ..database import get_db
|
|
from ..models import SignalFeedback
|
|
|
|
router = APIRouter(prefix="/feedbacks", tags=["feedbacks"])
|
|
|
|
|
|
@router.get("/stats")
|
|
async def get_feedback_stats(db: AsyncSession = Depends(get_db)):
|
|
"""获取反馈统计"""
|
|
result = await db.execute(select(SignalFeedback))
|
|
all_feedbacks = result.scalars().all()
|
|
|
|
total = len(all_feedbacks)
|
|
if total == 0:
|
|
return {
|
|
"total_feedbacks": 0,
|
|
"accuracy": 0.0,
|
|
"true_positives": 0,
|
|
"false_positives": 0,
|
|
"true_negatives": 0,
|
|
"false_negatives": 0,
|
|
}
|
|
|
|
correct = sum(
|
|
1 for f in all_feedbacks if f.ai_predicted_strategic == f.was_strategic
|
|
)
|
|
true_positives = sum(
|
|
1 for f in all_feedbacks if f.ai_predicted_strategic and f.was_strategic
|
|
)
|
|
false_positives = sum(
|
|
1 for f in all_feedbacks if f.ai_predicted_strategic and not f.was_strategic
|
|
)
|
|
true_negatives = sum(
|
|
1
|
|
for f in all_feedbacks
|
|
if not f.ai_predicted_strategic and not f.was_strategic
|
|
)
|
|
false_negatives = sum(
|
|
1
|
|
for f in all_feedbacks
|
|
if not f.ai_predicted_strategic and f.was_strategic
|
|
)
|
|
|
|
return {
|
|
"total_feedbacks": total,
|
|
"accuracy": correct / total,
|
|
"true_positives": true_positives,
|
|
"false_positives": false_positives,
|
|
"true_negatives": true_negatives,
|
|
"false_negatives": false_negatives,
|
|
}
|