0Pricing
AI Prompt Engineering · Lektion

Konfidenz und Unsicherheit bei der Klassifikation

Fordern Sie das Modell auf, Konfidenzwerte anzugeben und mehrdeutige Klassifikationen zu behandeln

Konfidenz und Unsicherheit bei der Klassifikation ist eine kostenlose AI Prompt Engineering-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Prompt Engineering-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.

Das Problem übermäßig selbstsicherer Modelle

Standardmäßig beantworten LLMs Klassifizierungsaufgaben mit scheinbarer Sicherheit, selbst wenn die Eingabe tatsächlich mehrdeutig ist. Ein Modell, das angewiesen wird, positiv, negativ oder neutral zurückzugeben, wird immer eine Auswahl treffen – niemals sagen Ich bin mir nicht sicher.

In Produktionssystemen führt es zu kostspieligen Fehlern, unsichere Klassifizierungen wie sichere zu behandeln: falsch weitergeleitete Support-Tickets, falsche Empfehlungen und ungenaue Berichte.

Die Quantifizierung der Unsicherheit in Klassifizierungs-Prompts löst dieses Problem.

Konfidenzwerte von 1 bis 10

Wenn Sie das Modell bitten, seine Konfidenz auf einer numerischen Skala zu bewerten, erhalten nachgelagerte Systeme ein differenziertes Signal, anhand dessen sie Schwellenwerte festlegen können:

import anthropic, json

client = anthropic.Anthropic(api_key='YOUR_API_KEY')

def classify_with_confidence(text):
    prompt = f'''
Classify the sentiment of the text below.
Return JSON:
{{
  "sentiment": "positive|negative|neutral",
  "confidence": 1-10,
  "reason": "brief explanation of confidence level"
}}

Confidence scale: 10=completely certain, 1=total guess, 5=genuinely ambiguous

Text: {text}
'''
    r = client.messages.create(
        model='claude-opus-4-5', max_tokens=100,
        messages=[{'role': 'user', 'content': prompt}]
    )
    return json.loads(r.content[0].text)

print(classify_with_confidence('I sort of liked it but the wait was too long.'))
print(classify_with_confidence('This product is absolutely outstanding!'))

Die UNCERTAIN-Antwort

Wenn Sie das Modell anweisen, bei einer Klassifizierungskonfidenz unterhalb eines Schwellenwerts ausdrücklich mit UNCERTAIN zu antworten, entsteht eine dreiteilige Ausgabe: positiv, negativ oder UNCERTAIN:

def classify_or_uncertain(text, uncertainty_threshold=4):
    prompt = f'''
Classify the sentiment of the text: positive, negative, or neutral.

If the sentiment is genuinely ambiguous or you are not confident (confidence below {uncertainty_threshold}/10),
return UNCERTAIN instead of guessing.

Return JSON: {{"sentiment": "positive|negative|neutral|UNCERTAIN", "confidence": 1-10}}

Text: {text}
'''
    r = client.messages.create(
        model='claude-opus-4-5', max_tokens=80,
        messages=[{'role': 'user', 'content': prompt}]
    )
    result = json.loads(r.content[0].text)

    if result['sentiment'] == 'UNCERTAIN' or result['confidence'] < uncertainty_threshold:
        print(f'Routing to human review: confidence={result["confidence"]}')
    return result

print(classify_or_uncertain('It was fine, I guess. Not bad, not great.'))
print(classify_or_uncertain('Absolutely terrible product. Never buying again.'))

Nach Wahrscheinlichkeit sortierte Kategorien

Bitten Sie das Modell, alle möglichen Kategorien nach ihrer Wahrscheinlichkeit zu sortieren, statt eine einzelne Kategorie zu erzwingen. Dadurch wird sichtbar, wie nah die beiden führenden Kategorien beieinanderliegen:

def classify_ranked(text, categories):
    cats = ', '.join(categories)
    prompt = f'''
Classify this text into one of these categories: {cats}

Return ALL categories ranked by likelihood, highest first.
Return JSON: {{"ranked": [{{"category": str, "probability": 0.0-1.0}}]}}
Probabilities must sum to 1.0.

Text: {text}
'''
    r = client.messages.create(
        model='claude-opus-4-5', max_tokens=150,
        messages=[{'role': 'user', 'content': prompt}]
    )
    result = json.loads(r.content[0].text)
    return result['ranked']

cats = ['billing', 'technical', 'general', 'cancellation']
ranked = classify_ranked('I was charged twice and now my account is locked.', cats)
for item in ranked:
    print(f'{item["category"]}: {item["probability"]:.0%}')

Mehrdeutigkeit anhand der Wahrscheinlichkeitsstreuung erkennen

Der Abstand zwischen den beiden führenden Wahrscheinlichkeiten ist ein zuverlässiges Signal für Mehrdeutigkeit. Ein kleiner Abstand bedeutet, dass das Modell unsicher ist; ein großer Abstand deutet auf hohe Konfidenz hin:

def classify_with_ambiguity_detection(text, categories, ambiguity_threshold=0.15):
    ranked = classify_ranked(text, categories)

    top1_prob = ranked[0]['probability']
    top2_prob = ranked[1]['probability'] if len(ranked) > 1 else 0
    spread = top1_prob - top2_prob

    is_ambiguous = spread < ambiguity_threshold

    return {
        'primary': ranked[0]['category'],
        'secondary': ranked[1]['category'] if len(ranked) > 1 else None,
        'confidence_spread': round(spread, 3),
        'is_ambiguous': is_ambiguous,
        'action': 'human_review' if is_ambiguous else 'auto_classify'
    }

result = classify_with_ambiguity_detection(
    'My upgrade did not apply and I think I was still charged.', ['billing', 'technical', 'general', 'cancellation']
)
print(result)

Bedingte Unsicherheit: Bei Unsicherheit nachfragen

Bei dialogorientierten Anwendungen kann das Modell statt UNCERTAIN um eine Präzisierung bitten:

SYSTEM_CLARIFY = '''
You are a support ticket classifier.
If the customer message is clear, classify it and respond with JSON:
{"action": "classify", "category": str, "confidence": 1-10}

If the message is ambiguous or you are not sure which category applies, respond with:
{"action": "clarify", "question": "A single clarifying question to ask the customer"}

Categories: billing, technical, account, cancellation

Only ask for clarification when genuinely needed. Prefer classification when possible.
'''

def classify_or_ask(message):
    r = client.messages.create(
        model='claude-opus-4-5', max_tokens=100,
        system=SYSTEM_CLARIFY,
        messages=[{'role': 'user', 'content': message}]
    )
    return json.loads(r.content[0].text)

print(classify_or_ask('It is not working anymore.'))
print(classify_or_ask('Cancel my subscription immediately.'))

Konfidenz kalibrieren: Temperatur und Konsistenz

Wenn dieselbe Klassifizierung bei unterschiedlichen Temperaturen mehrfach ausgeführt wird, lässt sich die tatsächliche Unsicherheit des Modells erkennen. Hohe Varianz = tatsächlich mehrdeutige Eingabe:

from collections import Counter

def calibrated_classify(text, n_samples=5):
    results = []
    for _ in range(n_samples):
        r = client.messages.create(
            model='claude-opus-4-5', max_tokens=50,
            messages=[{'role': 'user', 'content': f'Classify as positive/negative/neutral. Return JSON: {{"sentiment": str}}\n\n{text}'}]
        )
        results.append(json.loads(r.content[0].text)['sentiment'])

    counts = Counter(results)
    dominant = counts.most_common(1)[0]
    agreement_rate = dominant[1] / n_samples

    return {
        'classification': dominant[0],
        'agreement_rate': agreement_rate,
        'is_uncertain': agreement_rate < 0.7,
        'all_results': dict(counts)
    }

result = calibrated_classify('The product is okay, nothing special.')
print(result)

Weiterleitung auf Basis der Konfidenz

Ein Produktions-Routing-System verwendet Konfidenzstufen, um Eingaben an unterschiedliche Handler weiterzuleiten:

def route_by_confidence(text, classify_fn, auto_threshold=8, human_threshold=4):
    result = classify_fn(text)
    confidence = result.get('confidence', 5)
    category = result.get('category') or result.get('sentiment', 'unknown')

    if confidence >= auto_threshold:
        return {'route': 'auto_process', 'category': category, 'confidence': confidence}
    elif confidence >= human_threshold:
        return {'route': 'auto_process_with_flag', 'category': category, 'confidence': confidence,
                'flag': 'Low confidence — monitor output'}
    else:
        return {'route': 'human_review', 'category': category, 'confidence': confidence,
                'flag': 'Very low confidence — human classification required'}

print(route_by_confidence('Hate this product.', classify_with_confidence))
print(route_by_confidence('It is kind of okay but also not really.', classify_with_confidence))

Strukturierte Unsicherheitsfelder

Ein umfassendes Unsicherheitsschema für Klassifizierungsausgaben:

UNCERTAINTY_SCHEMA = '''
Return JSON:
{
  "primary_category": "string",
  "confidence": 1-10,
  "uncertainty_type": "none | ambiguous_input | insufficient_context | boundary_case | none",
  "alternative_categories": ["string"] or [],
  "uncertainty_explanation": "string or null",
  "recommended_action": "auto_classify | human_review | request_more_info"
}

Uncertainty types:
- ambiguous_input: The text could clearly mean multiple things
- insufficient_context: Need more information to classify correctly
- boundary_case: The text sits on the border between two categories
- none: Clear classification, no uncertainty
'''

print(UNCERTAINTY_SCHEMA)
print('Use this schema for any classification task requiring uncertainty quantification.')

Unsicherheit in der Produktion nachverfolgen

Überwachen Sie Unsicherheitsraten in der Produktion, um eine Verschlechterung der Prompt-Qualität oder Kategorien-Drift zu erkennen:

class ClassificationMonitor:
    def __init__(self, human_review_threshold=0.15):
        self.total = 0
        self.uncertain = 0
        self.threshold = human_review_threshold
        self.category_counts = {}

    def record(self, result):
        self.total += 1
        cat = result.get('category', 'unknown')
        self.category_counts[cat] = self.category_counts.get(cat, 0) + 1

        if result.get('confidence', 10) < 5 or result.get('sentiment') == 'UNCERTAIN':
            self.uncertain += 1

    def report(self):
        uncertain_rate = self.uncertain / self.total if self.total else 0
        alert = uncertain_rate > self.threshold
        return {
            'total': self.total,
            'uncertain_rate': round(uncertain_rate, 3),
            'alert': alert,
            'category_distribution': self.category_counts
        }

monitor = ClassificationMonitor()
print('Production monitoring system defined.')

Wann hohe Konfidenz vertrauenswürdig ist

Hohe Modellkonfidenz bedeutet nicht immer eine korrekte Klassifizierung. Häufige Fehlerquellen selbst bei hoher Konfidenz:

  • Systematische Verzerrung: Das Modell versieht ein bestimmtes Muster beständig mit dem falschen Label und ist dabei hochkonfident
  • Domänenverschiebung: Das Modell ist zuversichtlich, aber der Eingabestil unterscheidet sich stark von den Daten, mit denen es trainiert wurde
  • Gefälligkeit: Das Modell richtet seine Konfidenz danach, was gut klingt, nicht nach tatsächlicher Sicherheit

Bewerten Sie die Konfidenzkalibrierung stets anhand eines gelabelten Testsatzes – nicht nur die Genauigkeit, sondern auch, ob Vorhersagen mit hoher Konfidenz tatsächlich genauer sind als solche mit niedriger Konfidenz.

Kurze Überprüfung

Worauf deutet eine geringe Streuung zwischen den beiden führenden, nach Wahrscheinlichkeit sortierten Kategorien in einem Klassifizierungsergebnis hin?

Unsicherheit bei der Klassifizierung – die wichtigsten Erkenntnisse

Die Quantifizierung der Unsicherheit verwandelt Klassifizierung von einer Blackbox in ein kontrollierbares System:

  • Fordern Sie bei jeder Klassifizierung Konfidenzwerte (1–10) an – behandeln Sie Ausgaben niemals als gleichermaßen zuverlässig
  • Verwenden Sie die UNCERTAIN-Antwort für tatsächlich mehrdeutige Eingaben, statt eine Kategorie zu erzwingen
  • Sortieren Sie alle Kategorien nach Wahrscheinlichkeit – der Abstand zwischen den beiden führenden Kategorien ist das beste Signal für Mehrdeutigkeit
  • Leiten Sie Eingaben bei einer Konfidenz unterhalb des Schwellenwerts zur menschlichen Prüfung weiter; verarbeiten Sie sie bei höherer Konfidenz automatisch
  • Stellen Sie bei dialogorientierten Anwendungen klärende Fragen, statt UNCERTAIN zurückzugeben
  • Überwachen Sie Unsicherheitsraten in der Produktion – steigende Raten weisen auf eine Verschlechterung der Prompt-Qualität oder Kategorien-Drift hin
  • Bewerten Sie die Konfidenzkalibrierung stets anhand gelabelter Daten – nicht nur die Genauigkeit

Häufig gestellte Fragen

Ist die Lektion „Konfidenz und Unsicherheit bei der Klassifikation“ kostenlos?

Ja — der vollständige Text von „Konfidenz und Unsicherheit bei der Klassifikation“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Prompt Engineering-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Prompt Engineering-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Konfidenz und Unsicherheit bei der Klassifikation“?

Fordern Sie das Modell auf, Konfidenzwerte anzugeben und mehrdeutige Klassifikationen zu behandeln Du übst AI Prompt Engineering mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Prompt Engineering zu starten?

Keine Vorkenntnisse erforderlich. AI Prompt Engineering auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Konfidenz und Unsicherheit bei der Klassifikation“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Prompt Engineering-Lektion Code schreiben und ausführen?

Ja. Jede AI Prompt Engineering-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Prompts zur Named-Entity-Extraktion
  2. Schema-gesteuerte Datenextraktion
  3. LLM als Textklassifikator
  4. Konfidenz und Unsicherheit bei der Klassifikation
← Zurück zu AI Prompt Engineering