あるデータを元に算出したA,Bの集団があります。そのデータをスコア順で並べた時、理想(正解)は以下の様になります。
A,A,A,A,B,B,B,B
Aのデータは左に寄ってBのデータは右に寄るのが理想です。
しかし、実際にこのA,Bを並べてみると
B,A,A,B,A,A,B,B
の様に並んだとします。この時、正解の並びから実際に並んだAとBのスコア(正答率)を出したい時、どの様に計算すればよいかわかりません。
イメージとしては、正解の並び通りに並ぶとA,B共に正答率100%、Aが右かBが左にズレるほどスコアが小さくなり正答率が落ちる様にしたいです。
使用している言語はPythonです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
バブルソートしてスワップした回数を数えるのはいかがでしょうか(大きいほど正答率は低い)。
数え方はHow to count number of swaps in a bubble sort?が参考になるかと。
Python
1# 「スワップ率」 2def swap_rate(l): 3 4 # 必要スワップ回数 5 def swap_count(l): 6 count = 0 7 for j in range(len(l)): 8 for i in range(1, len(l)-j): 9 if l[i-1] > l[i]: 10 count += 1 11 l[i-1], l[i] = l[i], l[i-1] 12 return count 13 14 # 最悪スワップ回数 15 def max_count(l): 16 from collections import Counter 17 c = Counter(l) 18 assert len(c.values()) == 2 # 2種類のみで構成されたリスト 19 20 l_len = len(l) 21 max_cnt = 1 22 for v in c.values(): 23 max_cnt *= l_len - v 24 25 # 検算 26 #l2 = sorted(l,reverse=True) 27 #assert swap_count(l2) == max_cnt 28 29 return max_cnt 30 31 swap_cnt = swap_count(l) 32 max_cnt = max_count(l) 33 return 1 - (swap_cnt/max_cnt) 34 35 36for s in ['AAAABBBB','BBBBAAAA','AAABABBB','BAAABBBA','BAABAABB']: 37 r = swap_rate(list(s)) 38 print(s,r) 39""" 40AAAABBBB 1.0 41BBBBAAAA 0.0 42AAABABBB 0.9375 43BAAABBBA 0.5625 44BAABAABB 0.625 45"""
投稿2019/02/10 14:06
編集2019/02/11 07:10総合スコア38262
0
ド単純で恐縮ですが。
基礎を100%として、
一番左にB もしくは 一番右にA がある場合⇒それぞれ -21.875 %
左から2番目にB もしくは 右から2番目にA がある場合⇒それぞれ -15.625 %
左から3番目にB もしくは 右から3番目にA がある場合⇒それぞれ -9.375 %
左から4番目にB もしくは 右から4番目にA がある場合⇒それぞれ -3.125 %
値は4番目と5番目の間(言わば4.5番目)を中央(0)としてその距離で取り、
全て足すとマイナス100%になるようにしています。
can110さんの例を借ります。
'AAAABBBB' 100%
'BBBBAAAA' 0% (100-21.875-15.625-9.375-3.125-3.125-9.375-15.625-21.875)
'AAABABBB' 93.75% (100-3.125-3.125)
'BAAABBBA' 50% (100-21.875-3.125-9.375-15.625)
'BAABAABB' 62.5% (100-21.875-3.125-3.125-9.375)
投稿2019/02/11 07:55
総合スコア678
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
素直に正解率の計算でいいと思います。一致箇所の数を長さで割るだけです。
投稿2019/02/10 14:08
総合スコア30933
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。