MWS cup参戦記 version.2024

この記事は、[大阪工業大学 Advent Calendar 2024の14日目の記事](https://adventar.org/calendars/10405)です。  

# はじめに
どうも
本記事では、今年も参加したMWS Cupで私が担当した分野のアウトプットというよりは、今年は新人育成を主にしていたのでそれに関するあれやこれやを書いていきたいと思います。  
私が担当した表層解析で新たに勉強したことはそうないので[昨年の記事](https://qiita.com/yura7gi14/items/5ab3644ce659f2608046)を見てください。  

# 注意
本記事はn=1の体験を基にした記事であるためその点を留意して参考にするなり反面教師にするなりしてください。  

# ところで
MWS Cupって何?っていうと以下の引用文を読んでください。  
>MWS Cup は、研究用データセットの活用によるマルウェア対策研究の成果を活用して、規定時間内で課題に取り組み解析結果を競います。技術的な解析の正確性と、採点委員による解析方法のプレゼンテーションの採点から、合計点が高いチームから表彰します。研究用データセット活用WGにおいて、1チーム当り 6名までエントリーを募集し、受付後に各課題の事前準備を各チームに依頼します。

上記の通りマルウェアに関する競技を4つ行います。
分野は、事前課題、表層解析、静的解析、DFIRの4つです。
私は表層解析を担当しました。
表層解析では、約1週間と当日数時間でkaggleを使用したデータ分析を行います。
詳しくはMWS Cupのページを見てください。
ちなむとcssという学会併設イベントです。

# まず
昨年活躍してくださったとある方が卒業してしまったというのと、昨年に引き続き出場しているのが学部生だと私しかいないということもあって私が主戦力として頑張ってね！とボスから言われてしまいました。  
笑顔でハイ...と言ったはいいものの今年は１チームのみではなく、もう1チーム参加することになったため最大３人は育成する必要があるな...と軽く絶望しました。  
それというのも私は昨年の記事の感想にも書きましたが１か月ちょいで知識をほぼパワハラ同然で突っ込まれたのでさすがに自分にそれをするのはともかく他人にそんなことができるわけがないのです。  
(ちょっとしても怒られないんじゃないかな...と思ったことは秘密です)  
今年は幸せなことに８月にキックオフがあったので３か月近く猶予がありました。(昨年は9月中頃)  
単純計算去年の２倍です。これは色々できる...!と思ったのでできる限りせっつかずにのんびり知識をつけていってほしいという思いでいました。このときは。  

# 今年のスケジュール
ざっくりとした８月当初のスケジュール感と実際のスケジュールを比べてみましょうか  
以下は大まかな流れです。  
1.初めてのマルウェ解析というオライリーの本の2章を読んでもらう。
2.kaggleで勝つデータ分析の技術という本を読み進めてもらう。
並行して勉強したものの実装もやってもらいたい。
3.kaggleのコンペのtitanicをやってkaggleに慣れてもらう。
4.昨年の問題をやってもらう。

### ８月当初
1. 2,3日
2. 1か月から1か月半
3. 1週間
4. 残り始まるまでの期間

### 実際
1. 想定通り  
2. 大体想定通り  
3. 10/4時点で終了していない
4. 残りの時間

# 9月末での焦り
私の反省点を述べるとするのならば昨年の私を無意識下で基準にしていたことでしょう。できるだけしないようにと思っていたのですが、今思えばできないのもしょうがないのかもしれませんでした。  
表層解析はその性質上他の分野より1週間程度早く仕上げなければなりません。それもこれも表層解析が1週間前からコンペが始まるからなのですが。  
そのため、タイムリミットは10月15日　コンペが始まると予想されるその日まででした。  
スケジュール感を共有していなかったのも反省点の一つでしょう。  
大会自体は10月23日、前々から1週間前くらいには始まると言ってはいたのですが、9月末段階でその意識があったかというと、私の肌感覚ではなかったように感じました。  
まだ時間に余裕があるだろう、まだ後回しにしててもいいや  
8月9月であればその意識でも十分でした。インターンもあるでしょう。バイトもあるでしょう。9月になれば授業も始まるでしょう。ええ、これだけをするわけにはいかないので私も9月まではせっつくこともしませんでした。  
ただ、9月段階で大丈夫かなぁという思いはありました。当初の想定ではtitanicと昨年の問題を触ってもらえればと思っていましたが、これで大丈夫なのだろうかと思い、実際にはもう一つコンペを触ってもらっていました。大体9月末から10月頭くらいにどのコンペをしてもらおうか、できたら楽しいコンペを触ってもらいたいなとkaggleを見ていた気がします。  

# 10月の心配
カミングアウトするほどのことではありませんが私は機械学習の専門家なわけではありません。卒業研究で触っているわけでもありませんし、趣味で触っているわけでもないです。  
そのため、私は方針だけ教えて後は自力で動いてもらうほかなかったのです。もう少し私に技術力があればもっと何とかなったのだろうかと思いはしました。後の祭りではありますが。  
kaggle本の進みの遅さ、titanicに取り組むのが遅かったり実装の遅さから本当に大丈夫なのだろうかと心配になり、直前まで開催していたキノコの分類とかいう楽しそうなコンペと、昔にやっていたマルウェアのコンペ二つを提示し、1週間でできる限りしてこいと言いました。  
これは本番の空気感や時間配分などを実感してもらうことが本題でした。コンペの精度は正直そこまで重要視してなかったです。始まったばかりはのんびりしていても、終わりは来ます。それを疑似的にでもいいので体感してもらいたかったのです。  

# 本番直前のせっつき
これは私が後輩たちを育成してた中で最も後悔していることです。  
本番が始まる直前の進捗報告会の時のことでした。  
直前までにしてきてほしいと言っていたコンペの進捗があまりにも遅く(提出が一回もないといった具合)怒ってしまったのです。  
間違ったことを言ったとは今でも思っていませんが、各々のスケジュールは知らないので何かしら原因があったのだろうと思っています。   
ただ、前も述べました通り他チームの人を私は手伝うことができません。なので見捨てるという選択肢は最初から存在していません。  
以下は当時私が担当者全員に言ったメッセージです。  
>土曜は終日、日曜は19時以降、月曜は17時までと23時以降
上記の時間は空いてるので何かあったり相談があれば上記の時間であればすぐに対応できます。上記以外の時間ならベストエフォートで返事するようにします。また、火曜以降の表層が始まるまでの間ならいつでも大丈夫です。
さすがに別チームの手伝いを本番することはできないのでそれまでの間なら私を使い倒してもらって構いません。
頑張ってください

言ってくる人はいるかな、いたら全力で対応しようと思っていたら、一人だけいました。  
時間は午前3時半  
私も追い込みという名の去年の手法の再確認などをしていたら連絡がきたのでうれしかったです。  
こういった場面でちゃんと人を使える人はいいなと個人的には思います。人によっては深夜に送られても...という人がいるでしょうが、まあそこはちょうど私が起きていたという事実と始まるまで残り数日という事実もあるので。  

# 本番
表層は毎度ある程度の流れが提示されるのですが、今年はnotebook形式で流れが来て、中身のコードを埋めましょうの形式だったので昨年より楽な印象でした。  
というか、運営にも言いましたがその流れに沿った後こそが本番だと思ってました。  
例年通りrandom forestよりlightgbmの方が精度がいいとか、欠損値埋めましょうとかいろいろありましたね。  


# さいごのやらかし
これは私以外の誰も悪くないそこそこひどいやらかしの話です。  
来年もしこれを参考にする人がいるのなら私の二の舞は踏んでほしくないと思います。

kaggleではどの提出を見てほしいのかを自分たちで選ぶことができます。今回は2つまで選べました。選んでなければ、自動的に一番精度が高い二つを選ばれるのです。  
全く同じ精度が出たのなら、それはpublicになっても同じです。ええ。  
私は二つ精度が異なるものが上位2つだから大丈夫だろうと慢心していました。  
本番が終わって、結果が公開されたとき、他の提出物はどうだったかと確認したときです。  
直前に同じ精度で最も精度が高いものが提出されていました。  
多分報告は受けていたのでしょう。ただ、それを聞き逃したか意味のない単語だと判断してすぐに忘れたかのどちらかです。3番目に精度が高かったもの、本来2番目に高かったものが、上振れしていました。  
その結果、もしそれが選ばれていたのなら5位になっていたのです。  
本当に後悔しました。許されてはいけないと思いました。  
でも、結果は決定しています。もしこれで点数に差が大きく生まれていたのならこのやらかしの被害はもう少し大きかったでしょう。  


# 本番終わり
昨年は荒れに荒れた表層でした。運営が想定している精度より高いチームが5チーム程度存在しており、精度が良いチームと悪いチームが二分化されていたと言っても過言とは言い切れないほどだったと思っています。  

今年はどちらかというといいチームは9割を超える精度で、でも流れに沿っていれば8割には乗ってると言ったものでした。  
流れに乗った後どうするかは、もうそのチームにいる機械学習に強い人次第です。  
なのでまあまあ今回はそこそこよかったんじゃない?と運営の解説を聞くまで思っていました。  
ただ、運営の解説の冒頭、こんなことが言われました。
「ほとんどのチームが運営の想定を超えてました」(意訳)
...
e?

そんなことあるかいと思いました。しかし、よくよく考えてみればそれはそうなのです。  
昨年は3つほど箇条書きでこういった方法がいいと思うよと提示されただけでした。  
そして、それが模範解答の流れだったのです。  

そりゃあ、今年もそうなるでしょう。  
まずで書いてましたが私はnotebookが公開されてからずっとこれが終わってからが本番だと思っていました。  
なので、最後の項目がちょっとめんどそうだったのでそれはもう一人に任せて私は去年使った手法、使うことを想定してた手法、去年あまりよくなかった手法すべて使いました。最終日前日前のりしてた宿で徹夜しました。  
**全部空振りに終わりました。**  


# 総評
### にんげんそだてるのむずかしい  
こうしてほしいという動き通りには動かないし、なんでこうするんだろうとも思ったりもしました。  
例えば、勉強段階で私なら使うなと言われてるのだから参考になる実装はすべて見に行きます。0から考えるなんて効率の悪いことを時間のない中でできるかボケと。titanicならこういう手法を使ってやってみましたという記事が山のようにあるのだから私はほぼ写径の形で知識を入れてました。それもあったので1週間というか1日とか長くて3日で提出まで行けるでしょうという想定だったのです。  
まあ、表層に限れば運営の想定を超えれたなら大金星でしょう。 
来年はどうなるんでしょうか。私はあずかり知らないので高みの見物でもします。  

# 謝辞
去年キャリーしてくれた人、あなたの気持ちがよくわかりました。ごめんなさい。そしてありがとうございました。