File size: 1,389 Bytes
efdcedc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
def final_score(

    intent_score: float = 0,

    emotion_score: float = 0,

    cta_score: float = 0,

    text_quality_score: float = 0,

    similarity_score: float = None

) -> int:
    """

    Compute final Ad Performance Score (0-100)

    Scores are expected between 0 and 1 (or 0-100 if already scaled)

    similarity_score is optional (0-100)

    """

    # Scale 0-1 inputs to 0-100
    intent_score = intent_score * 100 if intent_score <= 1 else intent_score
    emotion_score = emotion_score * 100 if emotion_score <= 1 else emotion_score
    cta_score = cta_score * 100 if cta_score <= 1 else cta_score
    text_quality_score = text_quality_score * 100 if text_quality_score <= 1 else text_quality_score

    # Weighted scoring (adjustable)
    weights = {
        "intent": 0.3,
        "emotion": 0.25,
        "cta": 0.2,
        "text_quality": 0.15,
        "similarity": 0.1
    }

    total_score = (
        intent_score * weights["intent"] +
        emotion_score * weights["emotion"] +
        cta_score * weights["cta"] +
        text_quality_score * weights["text_quality"]
    )

    # Include similarity if available
    if similarity_score is not None:
        total_score += similarity_score * weights["similarity"]

    # Clamp between 0-100
    total_score = max(min(total_score, 100), 0)

    return round(total_score)