test01/tests/test_features.py

138 lines
4.0 KiB
Python
Raw Normal View History

import pytest
from src.features import (
TransactionFeatures, EvaluationResult, ExplanationResult,
ActionPlan, DecisionResult, ModelMetrics, TrainingResult,
TransactionClass, ConfidenceLevel, Priority,
FeatureContribution, Action
)
def test_transaction_features():
features = TransactionFeatures(
time=0.0,
v1=-1.36, v2=-0.07, v3=2.54, v4=1.38, v5=-0.34,
v6=0.46, v7=0.24, v8=0.10, v9=0.36, v10=0.09,
v11=-0.55, v12=-0.62, v13=-0.99, v14=-0.31, v15=1.47,
v16=-0.47, v17=0.21, v18=0.03, v19=0.40, v20=0.25,
v21=-0.02, v22=0.28, v23=-0.11, v24=0.07, v25=0.13,
v26=-0.19, v27=0.13, v28=-0.02, amount=149.62
)
assert features.time == 0.0
assert features.amount == 149.62
assert len(features.to_array()) == 30
def test_evaluation_result():
result = EvaluationResult(
predicted_class=1,
class_name=TransactionClass.FRAUD,
fraud_probability=0.95,
normal_probability=0.05,
confidence=ConfidenceLevel.HIGH
)
assert result.predicted_class == 1
assert result.class_name == TransactionClass.FRAUD
assert result.fraud_probability == 0.95
assert result.confidence == ConfidenceLevel.HIGH
def test_feature_contribution():
contribution = FeatureContribution(
feature_name="V14",
value=-0.99,
importance=0.15,
contribution=-0.15,
impact=""
)
assert contribution.feature_name == "V14"
assert contribution.value == -0.99
assert contribution.importance == 0.15
assert contribution.impact == ""
def test_explanation_result():
explanation = ExplanationResult(
model_type="RandomForestClassifier",
predicted_class=TransactionClass.FRAUD,
key_features=[],
overall_explanation="测试解释"
)
assert explanation.model_type == "RandomForestClassifier"
assert explanation.predicted_class == TransactionClass.FRAUD
def test_action():
action = Action(
priority=Priority.URGENT,
action="冻结账户",
reason="检测到欺诈"
)
assert action.priority == Priority.URGENT
assert action.action == "冻结账户"
def test_action_plan():
plan = ActionPlan(
predicted_class=TransactionClass.FRAUD,
confidence=ConfidenceLevel.HIGH,
actions=[]
)
assert plan.predicted_class == TransactionClass.FRAUD
assert plan.confidence == ConfidenceLevel.HIGH
def test_decision_result():
result = DecisionResult(
evaluation=EvaluationResult(
predicted_class=1,
class_name=TransactionClass.FRAUD,
fraud_probability=0.95,
normal_probability=0.05,
confidence=ConfidenceLevel.HIGH
),
explanation=ExplanationResult(
model_type="RandomForestClassifier",
predicted_class=TransactionClass.FRAUD,
key_features=[],
overall_explanation="测试"
),
action_plan=ActionPlan(
predicted_class=TransactionClass.FRAUD,
confidence=ConfidenceLevel.HIGH,
actions=[]
),
timestamp="2026-01-15"
)
assert result.evaluation.predicted_class == 1
assert result.explanation.model_type == "RandomForestClassifier"
assert result.action_plan.predicted_class == TransactionClass.FRAUD
def test_model_metrics():
metrics = ModelMetrics(
accuracy=0.95,
precision=0.90,
recall=0.85,
f1_score=0.87,
pr_auc=0.92
)
assert metrics.accuracy == 0.95
assert metrics.precision == 0.90
assert metrics.pr_auc == 0.92
def test_training_result():
result = TrainingResult(
model_name="random_forest",
metrics=ModelMetrics(
accuracy=0.95,
precision=0.90,
recall=0.85,
f1_score=0.87,
pr_auc=0.92
),
confusion_matrix=[[100, 5], [10, 85]]
)
assert result.model_name == "random_forest"
assert result.metrics.accuracy == 0.95