0

それぞれ「上」または「下」のプロパティを持つことができる要素のいくつかのリスト(常に長さ> 4)を処理するプログラムがあります。

それをコードに入れるには:

 mylist = [element1, element2, element3]

各要素には「上」または「下」要素があります(実際の問​​題の単純化):

element1 = ["up", "down", "up", "up"]
element2 = ["down", "down","down", "down", "up"]
element3 = ["up", "up", "down", "down", "up", "up", "up"]

「上」要素と「下」要素のカウントを使用して、リスト自体の「方向」を示す可能性のあるスコアを推測するアルゴリズムまたは何らかの方法があるかどうかを見つけようとしています。既存のコード (私が書いたわけではありません) は、これら 2 つのカウントの単純な比較を使用していました。

 if count_up > count_down
     return "up"
 else if count_down > count_up
     return "down"

もちろん、これはサイズの影響がかなり大きくなる傾向があり (ほとんど 100 要素のリストもあれば、わずか 5 要素のリストもあります)、両方のカウントが等しい場合にも失敗します。数値のスコアの方がいいです。ウィルソン スコア (Reddit で使用されているもの) を見ましたが、(私が知る限り) 成功/失敗を考慮していますが、私が言及した 2 つの状態はそのように定義することはできません。

これに使用できる既存の統計はありますか?

4

2 に答える 2

1

評価は、プログラムの目的とニーズに大きく依存します。一般的なスコアリング方法として、「上」を正のスコア1とし、「下」を負のスコア1と定義します。

次に、単純に平均を計算します:合計/カウント。Mbはそれを100にスケーリングします。upsのみの配列は100になり、downsのみの配列は-100になり、等しい場合は0になります。

このスコアは、配列内の値をよく理解できるはずです。

于 2012-05-16T15:30:05.593 に答える
1

私の即時の反応は、のようなものになるでしょう(number_up - number_down) / (number_up + number_down)。これは基本的に、全体のパーセンテージとして上下します。明らかな欠点は、非常に短いリストの場合、かなり小さい絶対差 (たとえば、3 上昇、1 下降) からパーセンテージがかなり高くなる可能性があることです。

編集:小さなリストが全体的なスコアに過度に影響を与えないようにする1つの可能な方法は、方程式にいくつかの定数を追加することです:

min_denom = 20;
factor = 10; 

result = ((number_up - number_down) / (number_up + number_down + min_denom)) * factor;

これにより、相対的な違いと絶対的な違いの両方をある程度考慮することができます。たとえば、3 アップ/1 ダウンでは、0.833 になります。上が 6/下が 2 (同じ比率ですが、それぞれの数が 2 倍) の場合、1.4 になります。同時に、相対的な差異も考慮されるため、(たとえば) 10 アップ/1 ダウンは 2.9 になります。

実際には、これは同じ一般的な考え方を保持しますが、より大きなサンプルに追加の重みを与えるある程度 (min_denom を変更することで調整可能) を選択することができます。厳密に言えば、factor完全に必要というわけではありません。結果を便利な範囲に保つのに役立つだけです。

もちろん、これは適切ではないかもしれません -- あなたが扱っているものでは、4 つのサンプルは 100 のサンプルと同じ重みを持つかもしれません。素敵な、きちんとした -1..1。

于 2012-05-16T15:30:12.600 に答える