コンテンツにスキップ

2025年7月12日

今週の活動

  • 交絡因子の影響を測定するためのプログラムを作成
    • lizard_analysis_current.py
      • GitPythonで分析対象のコミットに移動
      • Javaのメソッドの完全な修飾子(Long name)をパースしてクラス名とメソッド名を抽出
      • 抽出した情報を用いて分析対象のJavaファイルを検索
      • 指定したJavaファイルが見つかったらlizardで絶対値メトリクス(循環的複雑度、コード行数、トークン数)を測定
    • mcnemar_test.py
  • 特徴量を分析するためのプログラムを作成
    • analyzer.py
      • 上位n個の特徴量の分布をヒストグラムで可視化
      • Feature Importranceを用いて、ランダムフォレストにおける特徴量の重要度を横棒グラフで表示
      • 各特徴量が予測結果に与える影響をPartial Dependence Plot(PDP)で可視化

得られた成果

  • マクネマー検定の結果、以下のことが分かった
    • メトリクスの変化量を追加したデータセットは、元のデータセットよりも有意に優れている(p値: 0.000001)
    • メトリクスの変化量を追加したデータセットは、メトリクスの絶対値を追加したデータセットよりも有意に優れている(p値: 0.000000)
  • 各特徴量を分析するためのプログラムが完成

直面した課題

  • データセットに存在する特徴量の数が多く、各特徴量の分析だけではランダムフォレストの予測理由を把握できない
    • 交互作用項の導入や決定木の可視化を検討
      • 交互作用項: 2つ以上の特徴量が組み合わさったときに生まれる効果を表す特徴量で、特徴量AとBの積で表される
      • 決定木: データを「はい/いいえ」形式の質問で段階的に分類する手法
        • if-then形式のルールで構成されるため、予測理由を理解しやすい
        • ランダムフォレストは多数の決定木の多数決による予測を行っているため、個々の決定木を分析することで、どのような基準で予測しているかが分かる

来週の計画

  • 交互作用項の実装
  • 決定木の可視化
  • 特徴量の分析によって得られた新たな知見の整理