/**
 * 관계 추출 품질 검증 서비스
 * Precision, Recall, F1-Score 계산 및 관계 유형별 정확도 분석
 */
import type { RelationType } from '../../../shared/types/relation.js';
/**
 * 예상 관계 (Ground Truth)
 */
export interface ExpectedRelation {
    source_id: string;
    target_id: string;
    expected_relation_type: RelationType;
    expected_confidence_range: [number, number];
    source_content: string;
    target_content: string;
}
/**
 * 실제 추출된 관계
 */
export interface ExtractedRelation {
    source_id: string;
    target_id: string;
    relation_type: RelationType;
    confidence: number;
}
/**
 * 관계 매칭 결과
 */
export interface RelationMatch {
    expected: ExpectedRelation;
    extracted: ExtractedRelation | null;
    isMatch: boolean;
    isTypeMatch: boolean;
    isConfidenceInRange: boolean;
}
/**
 * 관계 유형별 상세 분석
 */
export interface TypeAnalysis {
    relationType: RelationType;
    precision: number;
    recall: number;
    f1Score: number;
    truePositives: number;
    falsePositives: number;
    falseNegatives: number;
    averageConfidence: number;
    confidenceStdDev: number;
    minConfidence: number;
    maxConfidence: number;
    confusionMatrix: Record<RelationType, number>;
    mostConfusedWith: RelationType | null;
    confusionRate: number;
}
/**
 * 혼동 행렬 (Confusion Matrix)
 * 실제 관계 유형 vs 예측 관계 유형
 */
export interface ConfusionMatrix {
    matrix: Record<RelationType, Record<RelationType, number>>;
    overallAccuracy: number;
    typeAccuracy: Record<RelationType, number>;
}
/**
 * 품질 메트릭
 */
export interface QualityMetrics {
    precision: number;
    recall: number;
    f1Score: number;
    truePositives: number;
    falsePositives: number;
    falseNegatives: number;
    typeMetrics: Record<RelationType, {
        precision: number;
        recall: number;
        f1Score: number;
        truePositives: number;
        falsePositives: number;
        falseNegatives: number;
    }>;
    confidenceComplianceRate: number;
    totalExpected: number;
    totalExtracted: number;
    typeAnalysis?: Record<RelationType, TypeAnalysis>;
    confusionMatrix?: ConfusionMatrix;
}
/**
 * 관계 추출 품질 검증 서비스
 */
export declare class RelationQualityValidator {
    /**
     * 관계 매칭: 예상 관계와 추출된 관계를 매칭
     *
     * Given: 예상 관계 목록과 추출된 관계 목록
     * When: source_id와 target_id로 매칭
     * Then: 매칭 결과 반환
     */
    matchRelations(expectedRelations: ExpectedRelation[], extractedRelations: ExtractedRelation[]): RelationMatch[];
    /**
     * Precision 계산
     * Precision = TP / (TP + FP)
     *
     * Given: 매칭 결과
     * When: 추출된 관계 중 올바른 관계 비율 계산
     * Then: Precision 값 반환
     */
    calculatePrecision(matches: RelationMatch[], extractedRelations: ExtractedRelation[]): number;
    /**
     * Recall 계산
     * Recall = TP / (TP + FN)
     *
     * Given: 매칭 결과와 예상 관계 목록
     * When: 예상 관계 중 올바르게 추출된 관계 비율 계산
     * Then: Recall 값 반환
     */
    calculateRecall(matches: RelationMatch[], expectedRelations: ExpectedRelation[]): number;
    /**
     * F1-Score 계산
     * F1 = 2 * (Precision * Recall) / (Precision + Recall)
     *
     * Given: Precision과 Recall
     * When: 조화 평균 계산
     * Then: F1-Score 값 반환
     */
    calculateF1Score(precision: number, recall: number): number;
    /**
     * 관계 유형별 메트릭 계산
     *
     * Given: 매칭 결과와 관계 유형
     * When: 특정 관계 유형에 대한 Precision, Recall, F1-Score 계산
     * Then: 관계 유형별 메트릭 반환
     */
    calculateTypeMetrics(matches: RelationMatch[], extractedRelations: ExtractedRelation[], expectedRelations: ExpectedRelation[], relationType: RelationType): {
        precision: number;
        recall: number;
        f1Score: number;
        truePositives: number;
        falsePositives: number;
        falseNegatives: number;
    };
    /**
     * 신뢰도 범위 준수율 계산
     *
     * Given: 매칭 결과
     * When: 추출된 관계 중 신뢰도가 예상 범위 내에 있는 비율 계산
     * Then: 준수율 반환
     */
    calculateConfidenceComplianceRate(matches: RelationMatch[]): number;
    /**
     * 전체 품질 메트릭 계산
     *
     * Given: 예상 관계 목록과 추출된 관계 목록
     * When: 모든 메트릭 계산
     * Then: 완전한 품질 메트릭 반환
     */
    calculateQualityMetrics(expectedRelations: ExpectedRelation[], extractedRelations: ExtractedRelation[]): QualityMetrics;
    /**
     * 메트릭이 임계값을 만족하는지 확인
     *
     * Given: 품질 메트릭과 임계값
     * When: 각 메트릭이 임계값 이상인지 확인
     * Then: 검증 결과 반환
     */
    validateThresholds(metrics: QualityMetrics, thresholds: {
        precision?: number;
        recall?: number;
        f1Score?: number;
    }): {
        passed: boolean;
        failures: Array<{
            metric: string;
            expected: number;
            actual: number;
        }>;
    };
    /**
     * 혼동 행렬 계산
     * 실제 관계 유형과 예측 관계 유형의 매칭 행렬
     *
     * Given: 매칭 결과
     * When: 실제 관계 유형과 예측 관계 유형을 매핑
     * Then: 혼동 행렬 반환
     */
    calculateConfusionMatrix(matches: RelationMatch[]): ConfusionMatrix;
    /**
     * 관계 유형별 상세 분석
     *
     * Given: 매칭 결과, 추출된 관계, 예상 관계, 관계 유형
     * When: 상세 통계 및 혼동 분석 수행
     * Then: 관계 유형별 상세 분석 반환
     */
    analyzeRelationType(matches: RelationMatch[], extractedRelations: ExtractedRelation[], expectedRelations: ExpectedRelation[], relationType: RelationType): TypeAnalysis;
    /**
     * 모든 관계 유형별 상세 분석 수행
     *
     * Given: 매칭 결과, 추출된 관계, 예상 관계
     * When: 모든 관계 유형에 대해 상세 분석 수행
     * Then: 관계 유형별 상세 분석 맵 반환
     */
    analyzeAllRelationTypes(matches: RelationMatch[], extractedRelations: ExtractedRelation[], expectedRelations: ExpectedRelation[]): Record<RelationType, TypeAnalysis>;
    /**
     * 전체 품질 메트릭 계산 (상세 분석 포함)
     *
     * Given: 예상 관계 목록과 추출된 관계 목록
     * When: 모든 메트릭 및 상세 분석 계산
     * Then: 완전한 품질 메트릭 반환 (관계 유형별 분석 및 혼동 행렬 포함)
     */
    calculateQualityMetricsWithAnalysis(expectedRelations: ExpectedRelation[], extractedRelations: ExtractedRelation[]): QualityMetrics;
}
//# sourceMappingURL=relation-quality-validator.d.ts.map