2

タイプ因子と応答/結果列のそれぞれの量の予測子を持つ data.frame があります。因子集計レベルでの計算の要約である各予測子の全体的な測定値を作成する必要があります。

過去に行ったように、ループに頼らずにこの計算に取り組む方法について、誰かが大まかな解決策を提供できることを願っています。

これまでに試したこと

以前は、後続の集計を実行していませんでした。かなりひどい R コードに依存していました。ループを実行して、各列の善と悪の度数分布表を作成し、善と悪の合計を追加し、貢献度を計算してから、ひどい。これにより、列ごとにテーブルが作成されるため、もう一度ループして各 WoE を合計し、テーブルに格納する必要があります。

それ以来、私は plyr を使い始め、データに対して基本的な要約と変換アクションを実行できますが、これは基本からかけ離れているようです。

計算

Weight of Evidence (WoE) = sum ( Factor-level WoEs )

各因子水準の WoE は次のように計算されlog(goodContribution/badContribution) 、寄与度は次のように定義されます。Number of [goods] for factor / total number of [goods]

1 つの列の段階的な計算の例

example<-data.frame(colA=factor(rep(letters[1:3],4)),
                    colB=factor(rep(letters[4:6],4)),
                    colC=factor(rep(letters[8:10],4)))

outcome<-factor(rep(c(1,0),6),labels=c("bad","good"))

wip <- as.data.frame(xtabs(formula = ~example$colA +  outcome))
wip <- dcast(wip, example.colA ~ outcome)
wip$badTotal<-sum(wip$bad)
wip$goodTotal<-sum(wip$good)
wip$badContribution<-wip$bad/wip$badTotal
wip$goodContribution<-wip$good/wip$goodTotal
wip$WOE<-log(wip$goodContribution/wip$badContribution)

outputs<-data.frame(col=c("colA"),WoE=sum(wip$WOE))

アップデート

例では WoE 計算が 0 で出ています。実際の計算はより複雑で、合計値が 0 の場合は、良い合計値または悪い合計値に小さな数値 (0.0001) を追加して、0 または Inf をログに渡さないようにします。

計算の 1 つのステップを含め、結果を出力に追加しました。以前は、すべての列をループして結果を出力テーブルに追加し、すべての WoE を取得していました。簡単にするために、WoE を計算するために以前に書いたコア コードに干渉するループ構造は望んでいませんでした。

4

1 に答える 1