見出し画像

上昇気流を捉える11


背景

前回からの続き
朝霧不成立で2023年の大会は全て終わってしまった、、
とはいえ、もう少し成績はなんとかならないものか?という課題は引き続き残っているので、これまでのデータを再度確認して飛び方のヒントがないものか探索してみる。

目的

データの粒度が揃うので大会時のデータを使用するものの、目的は「高く飛びたい!」「遠くまで飛びたい!」「長く飛びたい!」にある。
上手いパイロットは難なく飛び回っているものの、そこから上手く飛ぶコツを聞いてもあまりピンとこない(本当は理論化されているのだと思うけれども、その知識の共有するための共通言語がないようにも思う)。
そこで、共有しやすいように数値で飛び方の特徴を捉えることはできないかやってみたい。(結果、数値で特徴を表現する方法は見つからないかもしれないが、それはそれで結論かも、、)
ざっくりいうと「パラグライーダ関連の数値をいじって遊んでる中で飛び方のヒントが見つかればラッキー!」

データ収集

飛び方の特色を捉えるためになるべく条件の揃った違うパイロットのデータを多く集めたい。かつ、自分と比較したいのでその中に自分のデータも入っていて欲しいので参加した大会の時のデータを中心に集めてくる。具体的には2022年獅子吼から2023年朝霧までの大会で、大会が成立した日の197件。リフライトやフリーフライトのデータが混ざっているかもしれないが除外使用がなかった(自分の分は除外済み)
収集に使用したサイトは以下の2件
LiveTrack24
XContest
JHFがタスクと選手のIGCファイルをまるっと提供してくれると次の大会の予習もできて良いのに、、、と激しく思いながら手作業でちまちまと落としてきた。(データが少ないのでもっと効率よく増やしたい、、)

特徴量の検討

IGCファイルそのままでは比較できないので、フライトの特徴を表現するような指標を作成する。やってゆく中で不要になったものは削除し、欲しくなったものは作りながら検証をしてゆく。まずは思いついた以下の項目を計算して作ってみた

  • 旋回時の上昇率:同じところで飛んでいるのに上昇率が違う気がする、隣の芝は青いだけか?​

  • センタリング回数:ときどき高度を稼ぎながら進むのか?上げるところでドカンとあげて進むのか?​

  • センタリング時の旋回回数:旋回時の上昇率と共線性を持つか、、​

  • 旋回中ゲイン・ロスト・上昇幅:あげてゆくものの共線性を持ちそうな係数ばかり、、特徴を表現するパラメータは実は多くない?​

  • 平均飛行速度、平均旋回速度:重くて早く回せるから有利と言われるがそんなメリットを感じたことがない​

  • センタリング時間、旋回時間:これも平均すると他のパラメータの変形版でしかないかも​

  • 旋回あたり上昇幅:実数としての上昇幅​

  • パラグライダクラス、名前:カテゴリ変数として組み込むことができればやってみたい​

  • 順位:順位が高い人の特徴を見たいのは人情というもので、、


データ作成

IGCファイルをパースしてあれこれ作ってゆく大雑把には以下

  • IGCファイルをパースして時間、緯度、軽度、高度の要素を抽出

  • 連続する2点間で進行方向とスピードを判定​

  • 以下のように段階を踏んでセンタリング・旋回を判定​

    • 飛んでいる地点から20秒先までの飛行データを見て進行方向が逆方向になっているところまでのデータに旋回中のフラグをセット​

    • フラグの立っていないデータから10秒以内に旋回中フラグがない場合は旋回終了と判定。それ以外は旋回中のフラグを立てる​

    • 旋回中の2点間の角度を足しあげてゆき、360を超えるたびに旋回回数をカウントアップしてセットしてゆく​

  • センタリングごとに旋回回数をカウント​

  • 各センタリングの平均速度を計算​

  • 各旋回の2点間を計算し、一番長い距離をその旋回の直径とする

  • 上記の計算をする際に、各単位ごとの獲得高度、経過時間も計算。上昇率や効率を計算

旋回しているか否か?を決定するロジックにもっと洗練されたものがあると思うものの、どうやったらそのロジックに辿り着けるのか?そもそも旋回を検出したい人って思うほどおらず、こんなものなのか?とモヤモヤ感を拭い去ることができないものの、そこは見つかったら再計算するとしてこのまま前進めする​

データ整形

使用している機材によるものなのか、やたらスパイクや欠損値が多いデータ(IGCファイル)がたまに存在する。異常値検知して円滑化して、、、うん、とりあえず酷いファイルは対象外にしてどんどん進める。
一方、日付けもエリアも違うデータを素の値のまま並べて比較するのは気が引けるので、場所・日付けごとにMinMaxで正規化しておく。何もしないより心安らかだが、これで良いのかは別問題であるとも思っている。
でもまぁ、これで前進めしてどんな感じになるかをみてみる。もはやデータを作ってみてみることが目的化し始めている

相関

ここまでのデータで相関を見てみる。

特徴量間の相関ヒートマップ
  • 旋回中ロスト、旋回中ゲイン、旋回毎上昇幅、旋回あたり平均上昇幅は強い相関が見られ、それ自体はあまり以外ではない。以降は旋回あたり上昇幅だけを対象に進めてゆく

  • 旋回時回転時間(平均)と飛行平均速度、旋回平均速度が負の相関にある。長く回す人ほどスピードが速い?一方、速度と旋回時平均直径はあまり相関がないので常に「早く小さく回す」を目指すのが必ずしも主流ではないということか?以降、速度についてはわかりやすい飛行時平均速度を採用する。

  • 順位と相関の高い変数はないので、この後のクラスタリングで複数要素から決まるフライトの特徴を確認する、、ことができれば良いなぁ

  • 各特徴量は必ずしも正規分布に従っているとはいえないので相関の読み取り方としては乱暴なものの、直感に反した結果は出ていないのでとりあえず前進めしてみる


特徴量選択後の相関ヒートマップ

主要因分析

ライブラリにデータを入れるだけでそれっぽい感じの分析ができる例がたくさん載っているのでやってみる。

数値データを対象としたPCA結果

ぐぅ、教科書のように直線上に点が並ぶことはないか、、、
寄与率は四番目までの合計で8割ぐらい。あまりパキッと次元数が落ちている感じではないので、クラスタリングの結果の解釈もそんな感じか

寄与度ランキング


各点に選手名を入れてみると右半分、特に赤枠のあたりには特定の人が現れてデータの散らばりを広くしている気がする。ここを除外するともう少し傾向が見えそうなので、恣意的と重々承知で以降はこの辺りのデータを除外して進めてみる

クラスタリング(クラスタ数指定なし)

クラスタ数の決定もアルゴリズムに任した形でクラスタリングをやってみる。(一回りしてまたAIっぽいものに戻ってきた。強化学習ではなく教師なし学習だが、、)

クラスタ数を指定しないクラスタリング結果

ぐぅ、クラスタ数は2つであまりピークが分かれていない(左上から右下の対角線上にあるグラフの緑とオレンジのピークが重なっていないほうが特徴を読みやすい)。
その中でもかろうじて飛行平均速度は分かれている方なので、この変数と他の変数の組み合わせに限定した散布図を作成して見てみる

旋回あたり平均上昇幅と飛行平均速度で表現したクラスタ
  • 遅くて上昇幅があまり大きくない黄色(A)とそれ以外の紫(B)に分かれている印象

  • 速いクラスタの中でも上昇幅が大きくない(B枠の下の方)人が多いような、、

  • 逆にいうと効率よく上げるには速度が必要なのか?(相関には出ていなかった)


試しに15位以下(1から15)の点に順位のラベルを振って見た。あまりはっきりした傾向はないか、、、効率良く(散布図の上半分)かつ飛行平均速度が早め(散布図の右半分)のエリアに一桁順位の人が多いといえば多いかも。
やはり効率と速度は上位に入るために必要な要素なのかも

まとめ

「早く効率よく上げる人が上位に入りやすい」という面白みのない話になってしまっているが、それだと説明できない強い選手がいるのと、個人的に飛行スピードだけであれば悪くないと思うので、その他のフライトスタイルに活かせるような特徴が抽出できないかクラスタ数指定のクラスタリングもやって見て確認してゆきたい

この記事が気に入ったらサポートをしてみませんか?