説明変数の影響を調べるため、正解率が最低となる説明変数の組み合わせを抽出したいです。
Python
1import pandas as pd 2 3df = pd.DataFrame({ 4 "説明変数1": ["A", "A", "A", "B", "B"], 5 "説明変数2": ["C", "C", "D", "D", "C"], 6 "説明変数3": ["E", "E", "F", "F", "E"], 7 "データ数": [10, 20, 30, 10, 10], 8 "正解数": [8, 8, 8, 4, 5], 9 "正解率": [0.8, 0.4, 0.8, 0.4, 0.5] 10}) 11 12group = df.groupby(["説明変数1", "説明変数2", "説明変数3"]).sum() 13group["正解率"] = group["正解数"] / group["データ数"] 14 15print(group) 16 17# データ数 正解数 正解率 18# 説明変数1 説明変数2 説明変数3 19# A C E 30 16 0.533333 20# D F 30 8 0.266667 21# B C E 10 5 0.500000 22# D F 10 4 0.400000
上記のコードで、元データに(A,C,E)の組み合わせは2つありますが、groupbyされて全ての組み合わせが抽出できます。
さらにここから説明変数を2つに限定したときの、最悪の組み合わせから順にソートされた結果が欲しいです。
2つの説明変数に限定すると
・組み合わせ(C,E):(16 + 5) / (30 + 10) = 0.525
・組み合わせ(D,F):(8 + 4) / (30 + 10) = 0.3
というパターンも考えられます。
最終的な出力としては下記のようにイメージしています。
・(A,D) = 0.266667
・(A,F) = 0.266667
・(D,F) = 0.3
・(B,D) = 0.4
・(B,F) = 0.4
欲を言えば、2つでなく3つ以上の場合を設定できたり、(A,D)と(A,F)のように一つの組み合わせ(A,D,F)が分解されているような場合は、(A,D)と(A,F)は表示されずに(A,D,F)が表示されるようになるとなお良いです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。