投稿者:Nihito Kawahara

Tech

Apache Sparkで外れ値を除去する方法

blog-details

コラビットの川原です。

本日はApache Sparkで利用できる外れ値を除去するテクニックを紹介します。

 

Tukey法による外れ値除去

第一分位点および第三分位点からIQR(四分位範囲)の1.5倍離れた値を除去する方法です。

あまり統計に詳しくない人にも説明がしやすく、実装も簡単なので活用しやすいです。

 


def rejectOutliers(colName: String, df: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]) = {
  val quantiles = df.stat.approxQuantile(colName, Array(0.25, 0.5, 0.75), 0.0)
  val q1 = quantiles(0)
  val median = quantiles(1)
  val q3 = quantiles(2)
  val iqr = q3 - q1

  val lowerRange = q1 - 1.5 * iqr
  val upperRange = q3 + 1.5 * iqr

  println(s"* $colName median: $median q1: $q1 q3: $q3 lowerRange: $lowerRange upperRange: $upperRange")

  df.filter(s"$colName >= $lowerRange and $colName <= $upperRange")
}

下記のように実行します

// 適当なcase classを定義します
case class Record(value: Int)

// 検証用の適当なdfを作成します
val df = spark.createDataFrame(Seq(1,1,1,1,1,1,1,1,1,1,1,1,100,101).map(Record(_)))

// 100と101が除かれています。
rejectOutliers("value", df).show 

参考URL

https://bellcurve.jp/statistics/blog/14292.html

http://blog.madhukaraphatak.com/statistical-data-exploration-spark-part-3/

最後に

コラビットは現在エンジニアを募集しています!

  • webサービスを作りたい!
  • AIを作りたい、学びたい!
  • 未経験だけどモノづくりが大好き!プログラミングを仕事にしたい!

な方は当HPからぜひお問い合わせください!お待ちしています。