Kennzahl die mit Input negativer Zahlen umgeht

T_55

Lieutenant
Dabei seit
Feb. 2013
Beiträge
517
Hallo,

bei einer scheinbar trivialen Sache stehe ich gerade etwas auf dem Schlauch. Ich hab zwei Werte aus denen ich eine Bewertungskennzahl erzeugt will. Der eine Wert ist eine Zahl die das "Ziel" darstellt und der Andere den tatsächlichen "Treffer".
Die Bewertungskennzahl soll einfach das Verhältnis beider Zahlen zeigen um zu zeigen in welchem Verhältnis der Treffer das Ziel unter- oder überschritten hat. Wenn Ziel > Treffer dann besser. Wenn Treffer < Ziel dann schlechter.

Meine erste Idee war den Treffer durch das Ziel zu teilen dann schwanken die Ergebnisse um 1. Die Interpretation der Bewertungskennzahl ist dann > 1 = besser, < 1 = schlechter.
Z = 9, T = 7 -> 9/7 = 1,29
Z = 7, T = 9 -> 7/9 = 0,78
Mit positiven Werten funktioniert das gut.
ABER jetzt kann es sein, dass eine der beiden oder beide Zahlen negativ sind und dann funktioniert in verschiedenen Kombinationen bzw verschiedenen Größenverhältnissen diese Bewertungskennzahl NICHT mehr.
Ich hab alles mögliche versucht auch mit if-Abfragen zu den unterschiedlichen Negativkombis aber finde keine saubere Sache die mit den Vorzeichen simpel umgeht. Interessant ist zB auch der Fall wenn nur eine Zahl negativ ist.

Man könnte natürlich einfach subtrahieren aber dann geht das Verhältnis verloren zB 4 zu 9 würde ein komplett anderen Wert erzeugen als 400 zu 900.
Ob die Kennzahl jetzt um 0 um 1 oder um 100 schwankt ist eigentlich egal.
Hat jemand eine Idee für eine Lösung die vernünftig mit negativen Zahlen umgeht aber das Verhältnis beachtet?

Grüße
 

new Account()

Rear Admiral
Dabei seit
Mai 2018
Beiträge
5.743
Betrag(Z)/Betrag(T)

Mit anderen Worten, die beste Zahl ist argmax(Betrag(x)) mit x aus {T, Z}


EDIT:
T = -2
Z = 1

Ist nun T oder Z besser?

EDIT2:
Verstanden - aber was würdest du als Ergebnis erwarten bei dem Beispiel?

EDIT3:
Eventuell kannst du uns erklären was die Werte bedeuten?

EDIT4:
Ohne derartige Info, sehe ich keinen sinnvollen Weg
 
Zuletzt bearbeitet:

Homoioteleuton

Lt. Commander
Dabei seit
Nov. 2008
Beiträge
1.093
Du könntest den Abstand der Werte berechnen (also subtrahieren und Betrag berechnen) und dann den Wert entsprechend normieren (zB auf den Zielwert)
Wenn übers Ziel hinausschießen jetzt besser sein soll, könntest du hier noch mit if-Bedingungen arbeiten, oder nur die Differenz und nicht den Betrag berechnen, und vieles mehr

1573919550733.png
 

BeBur

Lt. Commander
Dabei seit
Nov. 2018
Beiträge
1.146
Also ich zumindest habe es immer noch nicht verstanden.
Das ist evtl. dein eigentliches Problem. Wie hier schon gesagt wurde, maxh kein xy-Problem daraus, sondern sag mal, was du konkret machen willst.

Und was ist z.B. bei T=0 oder Z=0? Oder eines von beiden nahe bei 0.
 

new Account()

Rear Admiral
Dabei seit
Mai 2018
Beiträge
5.743
Eventuell wäre das folgende interessant

T negativ: Betrag(Z)/(AbsoluteDifferenz+Betrag(Z)) (
Z negativ: (AbsoluteDifferenz+Betrag(Z))/Betrag(Z) (inf, falls Z=0)
Beide positiv: T+Z/Z (inf, falls Z=0)
Beide negativ: Z/T+Z


Mehr kann man da wsl. nicht rausholen.
Es quantifiziert die relative Abweichung zu Z.

EDIT: T+Z statt nur T oder Z bei beide negativ/positiv
 
Zuletzt bearbeitet: (Korrekturen)

T_55

Lieutenant
Ersteller dieses Themas
Dabei seit
Feb. 2013
Beiträge
517
@BeBur Ich weiß leider selber noch nicht wie die Kennzahl aussehen soll. Wenn der Treffer das Ziel überschreitet dann besser, wenn der Treffer das Ziel unterschreitet dann schlechter. Um welchen fixen Wert "besser" und "schlechter" schwankt wäre mir egal.
Ergänzung ()

@new Account() thx probiere ich aus
 

xxMuahdibxx

Fleet Admiral
Dabei seit
Juli 2011
Beiträge
19.687
Meine erste Idee war den Treffer durch das Ziel zu teilen dann schwanken die Ergebnisse um 1. Die Interpretation der Bewertungskennzahl ist dann > 1 = besser, < 1 = schlechter.
Schon da ist ein Denkfehler ...

Denn 1,99999999 = besser als 0,99999 laut dem was du da so schreibst.

Richtiger wäre es zu sagen alles was sehr nahe an 1 ist = besser.

Problem bei einer Null im Nenner ...

Warum nicht das reine Delta nutzen ...

Ziel = 9 Ist = 10 Delta = 1
Ziel = 1 Ist = -2 Delta = 3

Das Delta kannst du ja als Betrag darstellen daher wird es immer positiv sein ... zeigt nicht die Richtung der Abweichung an sondern nur den Wert.

Delta = 0 = Treffer.

Um daraus eine Kennzahl zu machen könnte man noch Delta / Ziel Teilen ...

Bsp ... Ziel = 100 Ist = 90 Delta = 10 Kennzahl = 0,1
Ziel = 10 Ist = 9 Delta = 1 Kennzahl = 0,1
Kennzahl = 0 = pefekter Treffer da das Delta dabei Null sein muss.
je größer die Kennzahl desto weiter weg befindet man sich halt.

problem halt wenn das Ziel immer noch Null ist.

Könnte man aber mit einer if Abfrage ausschliessen ... das dort eine Berechnung gemacht wird.
 
Zuletzt bearbeitet:

BeBur

Lt. Commander
Dabei seit
Nov. 2018
Beiträge
1.146
Ich weiß leider selber noch nicht wie die Kennzahl aussehen soll.
Dann wirst du es auch nicht korrekt programmieren können. Die Programmierung ist schließlich nur das aufbereiten eines Konzeptes für den Computer.

Was soll denn z.B. T = 10 und Z = 0 ergeben vs. was soll T = 1 und Z = 0 ergeben.

Nun, er will ja wenn das Ziel bei 1.000.000 liegt und man 'nur' um 1.000 also 1% daneben liegt nicht was anderes raus bekommen wie wenn das Ziel bei 100 liegt und man um 1, also ebenfalls 1% daneben liegt.

Wie hier andere schon angemerkt haben, ist das evtl. der eine sinnvolle Weg das zu modellieren.
Aber das ganze klingt ein wenig zu wirr um ganz genau sagen zu können, wie es zu modellieren sei.
 

new Account()

Rear Admiral
Dabei seit
Mai 2018
Beiträge
5.743

RalphS

Lt. Commander
Dabei seit
Feb. 2015
Beiträge
1.478
Abs() nicht verfügbar?
 
Top