Upgrade to Pro — share decks privately, control downloads, hide ads and more …

区分線形モデル入門

fullflu
March 19, 2023

 区分線形モデル入門

区分線形モデル(Piecewise Linear Model)について簡単にまとめました。
区分線形モデルの問題設定と推定手法の整理、公開実装の紹介、自前実装のサンプルコードと簡易的な実験結果を載せています。

fullflu

March 19, 2023
Tweet

More Decks by fullflu

Other Decks in Technology

Transcript

  1. 発表概要 • 区間ごとに異質性があるデータをモデリングしたいとき、区分線形モデルが使える ことがある ◦ えいやで作った機械学習モデルよりいい感じの結果になる例を示す • 区分線形モデルを作るときには、区間情報(breakpoint)をドメイン知識で与えた 上で、区分線形モデル用のライブラリを使わず自前で実装するとよい ◦

    区間(breakpoint)の推定が安定しているとは限らない ◦ 「だいたいこの辺で異質性がありそう」というドメイン知識が使えるケースも多い ◦ 区分線形モデル用のライブラリは多変量解析ができない ※ 資料に出てくる図は、学習に 2000点・評価に712点を使った人工データ
  2. 参考資料 区分線形回帰の python library: https://github.com/chasmani/piecewise-regression breakpoint の推定: https://onlinelibrary.wiley.com/doi/10.1002/sim.1545 linear tree:

    https://github.com/cerlymarco/linear-tree pythonで区分線形モデリングしたい人たち : https://stackoverflow.com/questions/29382903/how-to-apply-piecewise-linear-fit-in-python
  3. stackoverflow を見てみる いっぱいコメントがついているが、問題を直接解決できそうなものは少ない • interpolate すればいいよ ◦ 予測モデルを作りたいのでダメ ❌ •

    lineartreeというライブラリを作ったから使っちゃいなよ ◦ 境界の滑らかさを担保できないので微妙 😇 • piesewise-regression というライブラリを使えばいいよ ◦ breakpointがわかっているときや多変量解析したいときは使えないし、動くか怪しい(後述) 😇 • pytorch使ってディープラーニングすればいいよ ◦ overkill・・・😇 • scipyのcurve_fitを使えばいいよ ◦ 一番しっくりきた✅ ◦ breakpointがわかっている場合や、多変量を扱いたいときの言及はない 😇
  4. breakpointの値の推定方法その1(Muggeo 2003) テイラー展開した式について、線形回帰してから、回帰係数を変形する - piecewise-regression というライブラリで実装されている 区間が2つ(breakpointがψ 1つ)のときのbreakpoint推定アルゴリズムは以下で書ける : -

    1. ψ(0) : breakpointの現時点の推定結果 - 2. a, c, β, -β(ψ-ψ(0)) : 線形モデルのパラメータ - 3. -β(ψ-ψ(0)) の推定結果をγとすると、ψ(0) - γ/β がbreakpointの次時点の推定結果 1,2,3を収束するまで繰り返す Estimating regression models with unknown break-points, https://onlinelibrary.wiley.com/doi/10.1002/sim.1545 https://github.com/chasmani/piecewise-regression/blob/master/piecewise_regression/main.py#L121-L122
  5. モデルの比較 3つの手法を実装して可視化した • Linear model (Separated) ◦ 区間ごとに線形モデルを別々に推定 • Piecewise

    Linear Model ◦ breakpointの値がわかっている(外から与えられる)と仮定したときの区分線形モデル • Piecewise Linear Model (estimated breaking point) ◦ breakpointの数はわかっているが、値はわからないと仮定したときの区分線形モデル
  6. piesewise-regression ライブラリの主張を眺めてみる • 1次元のxとyの区分線形モデルを推定するにあたって、breakpointの値が不明なと きに、Muggeoの手法でbreakpointの値も含めて一気に推定できる • bootstrapを使うことで、breakpointの推定を収束しやすくできる • 信頼区間を推定できる •

    breakpointの存在について、Daviesの仮説検定ができる • 可視化が便利 • breakpointの数もわからないときに、BICを使ってモデル比較ができる ※ 今回の人工データで実験したら、収束しなかった・・・orz
  7. 区分線形モデルを使いたいときのまとめ breakpointをこちらが与えて、素直に自分で回帰式を書くのが一番よさそう • breakpoint の推定が安定する保証がないので、breakpointは与えよう ◦ Muggeo 2003 の推定手法は洗練されているように見えるが、収束する保証がない。簡単なデータ で実験しても収束しなかった。

    ◦ scipy の curve_fit による推定はそれっぽい推定結果を出せたので Muggeoの手法よりは使えそう だが、安定しているかは不明。 ◦ 使えなくはないが、基礎集計とドメイン知識を使って breakpoint を与えれば十分かな • 他の外生変数を含めた多変量モデルを既存ライブラリでは作れないので、自分で 回帰式を書こう
  8. [再掲]: 発表概要 • 区間ごとに異質性があるデータをモデリングしたいとき、区分線形モデルが使える ことがある ◦ えいやで作った機械学習モデルよりいい感じの結果になる例を示す • 区分線形モデルを作るときには、区間情報(breakpoint)をドメイン知識で与えた 上で、区分線形モデル用のライブラリを使わず自前で実装するとよい

    ◦ 区間(breakpoint)の推定が安定しているとは限らない ◦ 「だいたいこの辺で異質性がありそう」というドメイン知識が使えるケースも多い ◦ 区分線形モデル用のライブラリは多変量解析ができない ※ 資料に出てくる図は、学習に 2000点・評価に712点を使った人工データ