コンテンツにスキップ

2025年7月5日

今週の活動

  • BugHunterデータセットに特徴量を追加・分析するためのプログラムの作成
    • lizard_analysis_changes.py
      • GitPythonで分析対象のコミットに移動
      • Javaのメソッドの完全な修飾子(Long name)をパースしてクラス名とメソッド名を抽出
      • 抽出した情報を用いて分析対象のJavaファイルを検索
      • 指定したJavaファイルが見つかったらlizardで変化量メトリクス(循環的複雑度、コード行数、トークン数)を測定
      • 変化量を測定できなかったときに生じる欠損値によるバイアスを解消するために、メソッドに対する操作(追加、変更、削除)を表す特徴量(operation_type)を追加
    • trainer.py
      • lizard_analysis_changes.pyのoperation_typeカラムをOne-Hotエンコーディングして数値データとして扱えるように修正
      • pickleで機械学習モデルをバイナリファイルとしてエクスポートする処理を追加

得られた成果

  • データセットを使ったモデル評価でF1スコアがおよそ0.1向上
    • BugHunterデータセットからElasticsearchプロジェクトに関するデータのみを抽出
    • 全ての値が0である特徴量を削除
    • Elasticsearchの外部依存パッケージに関するデータを削除
    • データセットのうち、先頭3000行のデータに対して変化量メトリクスを追加し、モデルに学習させた

直面した課題

  • Lizardでコードの変化量を測定する際に、分析対象のJavaファイルが20%程度の確率で見つからず、一部の値が欠損し、バイアスが生じる
    • 問題箇所を特定するための処理を追加予定
  • 変化量が交絡因子を持っており、変化量を追加するだけではその効果を評価できない
    • 交絡因子: 研究で調べたい原因と結果の両方に影響を与える要因
      • 今回の場合はメトリクスの種類や値が「原因」であり、バグの有無は「結果」に当たる
      • 例えば、トークン数の変化量(相対値)は、トークン数の絶対値という交絡因子を持っているため、トークン数の変化量を追加したことでモデルの性能が向上したとしても、変化量自体の有用性を示したことにはならない
    • メトリクス値の変化量ではなく、絶対値を測定するプログラムを新たに作成予定

来週の計画

  • 交絡因子の影響を測定するためのプログラムを作成