攻撃自動検知モデルを作成するワークショップに参加しました
2019年12月21日と22日の2日間、秋葉原でSECCON 2019 Akihabaraが開催されています。
このイベントでは、サイバーセキュリティに関するカンファレンス、ワークショップ、展示が行われています。
また、SECCON CTF 2019と呼ばれるセキュリティの技術を競う大会が開かれていて、2日間にかけて国内大会と国際大会の決勝戦があります。
大会の様子は会場で直接見ることができ、決勝戦ということもあって参加者の皆さんは凄く集中して落ち着きながら問題を解いているようでした!
写真は、国際大会のランキング表です。
なんだかエヴァンゲリオンっぽい笑
21日に、開催前から気になっていた、攻撃自動検知ワークショップに参加してきました!
Cyber Securityと機械学習の両方に興味がある私にとっては、夢のようなワークショップだったため、楽しみ過ぎて会場には一番乗りでした。
概要
クロスサイトスクリプティング(XSS)を突く攻撃(XSS文字列)を検知するモデルを作成し、運営が用意したデータに対して”正常・攻撃”の二値分類(0 or 1)をするというものです。
モデルのベースは運営が用意したものを使用し、特徴量エンジニアリングやハイパーパラメータのチューニングをして検知の精度を上げて競いました。
データ
train/test dataは、tsv形式のファイルです。
ファイルの中身は、HTMLのソースコードと攻撃ペイロードのコードを混ぜたもので、train dataには正常か攻撃かのラベルも列としてありました。
モデル作成
ファイルの中身がソースコード(文字列)であるため、前処理の仕方としては自然言語処理に近い印象でした。
運営が用意したモデルは2種類あり、ナイーブベイズ分類器と多層パーセプトロンです。
コードを変更せずに二値分類することも可能でしたが、精度を上げるために特徴量エンジニアリングやハイパーパラメータのチューニングをしました。
ちなみにですが、モデルの作成をするときはサイバーセキュリティの知識は全く必要なく、機械学習モデルを構築できるスキルの方が重要でした。
結果
私は、多層パーセプトロンのモデルを改良して検知の結果を提出しました。
モデルの精度はそこそこ高かったのですが、accuracyはサイバーセキュリティの観点からすると低いので、まだまだ改良する必要があります。
攻撃を検知するのも大事ですが誤検知を防ぐことも大事なので、accuracyの数値が高いことが求められるとのこと。
余談ですが、今回のワークショップでaccuracyが99%の方がいましたが、train dataで攻撃ラベルが付いているデータを目視で見分け、test dataの正解ラベルには手打ちで入力したそうです。
なので、モデル作成も大事ですが、自然言語処理においてもEDAの大切さを改めて感じました。
ワークショップでは、機械学習モデルがサイバーセキュリティの分野でどのように活用されているのかと同時に、機械学習のモデル精度がより高く求められることを知ることができました。
引き続き、作成したコードを改良して勉強したいと思います。
Kaggle Days Tokyoに参加しました
2019年12月11日と12日の2日間、"Kaggle Days Tokyo"に参加してきました。
Kaggle Daysとは、 2018年から始まった、年に4~5回行われるKaggleのオフラインイベントです。
会場となる国・地域はイベントごとに異なり、今回は東京で開催されました。
公式サイトのアジェンダにある通り、11日(Day 1)はKaggleのGrandmasterやMasterの方々によるプレゼンテーションとワークショップ、12日(Day2)はKaggle Days Tokyoの参加者のみが参加できるオフラインコンペティションが行われました。
Day 1
Day 1では、Kaggleのコンペで使えるテクニックを中心に紹介してくださいました。
発表中やワークショップの最中は、聞きながらメモを取るのに必死。
Kaggleは1年ほど前にフリーランスアルバイトの研修で使用していたため、アカウントは持っていましたがコンペに挑み始めたのは今年の10月だったので、どのプレゼンテーションも為になるものでした。
私が聴講(参加)したプレゼンテーションとワークショップを、いくつかまとめようと思います。
Tutorial on Model Validation and Parameter Tuning by Raja Iqbal
- Kaggleにおいてのtrain/test dataの定義
- overfittingは、generalizationが不足しているときに起きる
- train/test dataで正確に予測できても、overfittingは起こりうる
- overfittingを防ぐために、パラメーターチューニングをする
- Kaggleにおいて、一般的にはtrain dataの70%をモデル作成のために、残りの30%はモデル評価のために使う
- bias/variance tradeoffについてのディスカッション
- High biasは、underfittingを起こす
- High varianceは、overfittingを起こす
- パラメーターチューニングと、交差検証の方法の紹介
Joining NN Competitions (for beginners) by Tomohiro Takesako
- NNコンペの取り組み方 (コンペの選択→ベースライン作成→改良)
- 純粋に興味がある画像コンペを選ぶのがいい
- beginnerは、時間をかけてでもベースラインを作り上げるのが大事
- augmentationは目視で注意深く確認
- モデル改善のために、まずはvalidationを確立させる
- スコアが変わる原因を突き止めるために、random seedは固定する
- スタンダードなやり方を知るために、論文やKaggleのdiscussion、他の人のnotebookを読んで勉強
Imputation Strategy by Yuji Hiramatsu
- 統計学的に欠損値の発生の仕方は、MCAR (Missing Completely At Random)、MAR (Missing At Random)、NMAR (Not Missing At Random) の3パターン
- 欠損があるデータは削除するという、LD (Listwise Deletion)、PD (Pairwise Deletion) の2パターンの方法があるが、統計学的には推奨されない
- 欠損値補完の方法として、単一代入法、多重代入法の2パターンがある
- XGBoostはNAを活かして予測できる
How to Encode Categorical Features for GBDT by Ryuji Sakata
- カテゴリ型のデータをエンコードする方法として、主に3種類
- one-hot encodingは、線形回帰でよく使われる
- label encodingは、GBDTで使われる
- target encodingは、out of foldでエンコードするのが良いが、foldの数が多いと過学習を起こす
- 他のエンコードの方法として、feature hasing、frequency encoding、embeddingなどがある
- one-hot encoding、label encoding、target encoding、LGBMのcategorical feature supportを、num_leavesの数ごとで比較
- num_leavesの数ごとに、精度の良いモデルが違う
以下は、プレゼンターの方々が共有してくださったスライドのリンクです。
・Imputation Strategy by Yuji Hiramatsu
・How to Encode Categorical Features for GBDT by Ryuji Sakata (Jack)
・Feature Engineering Techniques & GBDT implementation by Daisuke Kadowaki
・My Journey to Grandmaster: Success & Failure by Jin Zhan
Day 2
Day 2では、日経電子版のデータを使用して、ユーザの年齢を予測するというコンペが行われました。
Day 1の終了後、Twitter上でチームを組んでくれるという方に出会い、一緒にコンペに挑むことに。
初対面の方とのコンペは初めてでしたが、次第に仲良くなり、モデル作成方法や特徴量エンジニアリングに悩みつつも、楽しく参加することができました!
コンペ終了後は、1位~3位の表彰式と各チームがどのように予測したかを知ることができ、とても勉強になりました。
ちなみにですが、Day 2では運営の方のアナウンスもあって、全員KaggleのTシャツを着て参加しました!
Celebration Party
その後はパーティが開かれ、他のKagglerの方たちと交流する良い機会となりました。
食事として、可愛いカップケーキもありました!
Twitter上で繋がった方とも直接お話ができ、楽しかったです :)
また、Kaggleで勝つデータ分析の技術(通称:Kaggle本)を持参し、著者であるthreecourseさん、Jackさん、Maxwellさん(私の名前入りで!)からサインを頂きました!
パーティが終わった後も、Kaggle本の著者の方々を含めたKagglerの方々に、Kaggleの勉強法を中心に色々なお話を聞くことができました。
最後に
Kaggleのイベントは初めて参加しましたが、Kagglerの皆さんは優しい方ばかりで、Kaggle新参者の私にも基礎的なお話を含めて様々なことを教えてくださいました。
プレゼンテーションとワークショップで学んだことをKaggleのコンペで取り入れて、自分のスキルとして身につけたいです。
この先もKaggleの勉強を頑張り、メダルを目指したいと思います!