0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

鳥の声と6週間 ── 初心者がKaggleで0.532から0.904まで這い上がった記録

0
Posted at

📖 読了目安:約9分

普段はAPIとDBを触っているバックエンドエンジニアが、人生2回目の本格的なKaggleコンペに挑んだ。しかも今度は、これまで触ったことのない「音声」が相手だ。結論から言うと、半分は惨敗で、半分は望外の大逆転だった。賢いAIには裏切られ続け、最後に勝ったのは「現地の泥臭いAI」だった。その6週間の記録を書き残しておく。


image.png

第1幕:導入 ── 畑違いの戦場へ

1-1. 自己紹介とジレンマ

本業はバックエンドエンジニア。API設計、DBチューニング、CI/CDパイプラインの整備は日常的にやっている。一方で、機械学習(ML)はまだ初心者の域を出ない。

とはいえKaggleは初めてではない。前回、Playground Series(Kaggleの練習向けシリーズ)の「顧客解約予測」コンペに挑んだ。表形式データで、顧客が解約するかを当てる課題だ。だから、しっかり参加するのはこれで2回目になる。

だが今回は勝手がまるで違った。前回が見慣れた表データだったのに対し、今回の相手は 音声 だ。選んだのは BirdCLEF+ 2026。南米パンタナール地域の自然録音から、どの鳥が鳴いているかを当てるコンペで、賞金は$50,000、主催はコーネル大学の鳥類研究所、世界中の研究者が集まる。

表データなら業務の延長線上で想像がつく。だが音声は完全に未知の領域だ。「2回目」という小さな自信と「初めての音声」という大きな不安を抱えて、この戦場に足を踏み入れた。

1-2. 今回の戦場

やることはシンプルに聞こえる。「録音を聞いて、鳴いている鳥の種類を当てる」。だが初心者の前には、すぐに3つの壁が立ちはだかった。

  1. データが音声で、とにかく重い。画像や表データと違い、扱いに手間と計算時間がかかる。
  2. 正解ラベル付きの“現地データ”が極端に少ない。パンタナールで録られた、答え合わせができる音声はごくわずかしかない。
  3. 本番の採点環境が厳しい。提出時の予測計算は 90分以内・インターネット遮断 でやり切らねばならない。

この3つが、後に何度も奈落に突き落とすことになる──とは、この時点では知る由もなかった。

1-3. バックエンドの武器は通用するのか(4月12日)

ML力では世界の猛者に勝てない。それは最初から分かっていた。だから、本業の武器で殴ることにした。自動化・構造化・CI/CD。要するに「ソフトウェアエンジニアの基礎体力」だ。

予測を作る一連の流れ(パイプライン)を組み、GitHub Actionsからボタンひとつで本番採点まで走る仕組みを先に整えた。MLの知識は薄くても、ここは自分のフィールドだ。

最初のスコアは 0.532。0.5は「まったくのデタラメ」を意味するので、ほんの少しマシな程度。ここから長い旅が始まった。


第2幕:展開 ── 賢いAIたちの、裏切りの記録

2-1. 最初の上り坂 ──「教科書通り」は素直に効いた(0.532 → 0.776)

最初のうちは順調だった。

まず、鳥の鳴き声を「声紋のような縞模様の画像」に変換し、画像認識AIに見分けさせた。次に、複数のAIの予測を平均する「多数決」方式にした。さらに、Googleなどが公開している**鳥の声の専門AI(Perch)**を“すでに耳が肥えた先輩”として借りてきて、自分は最後の判定だけを担当する形にした。

ここまでで 0.776。教科書通りにやれば、初心者でもここまでは上がるのか──と、このときは安心していた。

2-2. 小さな大勝利 ──「鳴き声が途切れる」問題(+0.010)

次の改善は、MLというより観察から生まれた。録音は5秒ごとに区切って処理していたが、パンタナールの鳥は鳴き声が短く、ちょうど区切りの境界で声が分断されてしまう。そこで区切る位置を少しずらして何度も聞き直し、結果を重ねた。

たったこれだけで +0.010、過去最大級の改善になった(0.786)。「対象を素直に観察すると効く」──この小さな成功体験は、後半の大逆転の伏線になる。

2-3. 繰り返される悲劇 ──「練習では天才、本番では役立たず」

ここからが本当の戦い、そして長い苦難の始まりだった。

Kaggleには2種類の点数がある。手元で自己採点する CV(練習点) と、本番で採点される LB(本番点) だ。教科書には「強いモデルを足してCVを上げ、多様なモデルを混ぜろ」とある。初心者ゆえ、それを素直に信じた。

そして、3体の高性能AIに順番に裏切られた。

  • 画像AI(ConvNeXt):練習点は全モデル中トップ。意気揚々と投入したら、本番点はむしろ悪化。
  • 時系列を読み解くAI(SSM):音声を時間の流れとして追うタイプ。練習点が高く期待したが、本番では −0.009 の害。混ぜるほど点が下がった。
  • 大型のTransformer(AST):何時間もかけて学習させた自信作。だが本番にかけると 90分の制限時間に間に合わずタイムアウト。一度も採点されず丸ごとボツになった。
投入したAI 練習点(CV) 本番(LB) 結末
画像AI ConvNeXt 最高クラス 悪化 凍結
時系列を読み解くAI SSM 高い −0.009 凍結
大型Transformer AST 最高クラス 測定不能 90分超過でボツ

特にASTの件は痛かった。だがこれは、MLの失敗というより見積もりの失敗だ。「本番の制限時間に収まるか?」を作る前に測っていれば防げた。本業なら真っ先にやる確認なのに、畑が違うと当たり前のことほど抜け落ちる。

2-4. 見えてきた“真犯人” ──「似た者同士は混ぜても無駄」

裏切りはこれだけではなかった。数値の微調整、順位の補正、確率の補正……良かれと思って足す施策が、ことごとく**「点が1ミリも動かない」**結果に終わった。同じ壁に何度もぶつかるうち、一つの仮説にたどり着いた。

多数決は、“違う視点”の意見を入れたときだけ強くなる。似た意見は、何票積み上げても結果が変わらない。

すでに似た判断をするAIをいくら足しても、結論は動かない。当たり前のようでいて、教科書はこれを正面から教えてくれなかった。この仮説が、第3幕の大逆転への伏線になる。

2-5. エンジニアリング力で殴る

ML力で勝てないなら、実験の物量と管理で勝負するしかない。ここはバックエンドエンジニアの独壇場だった。GitHub ActionsのUIから設定を変えて提出を自動で回し、スマホからでも実験を起動できるようにした。そして何より、すべての実験に通し番号(RUN番号)を振り、結果と考察を記録し続けた。「何を試して、何が効かなかったか」を一切忘れない仕組みだ。

最終的に試した施策は 33本。大半はボツになったが、その記録こそが次の一手の精度を上げた。ML力の不足を、実験管理と自動化の物量で補う──これが初心者なりの戦い方だった。


第3幕:結末 ── 非常識な賭けと、二度の大逆転

3-1. 賭け ──「世界中のデータより、“この沼地”の音だけで学ばせる」

ある時、ふと考えた。借りてきた高性能AIたちは、みな“世界中の鳥の声”で学んでいる。だから一般的には優秀だ。でも、もしかするとパンタナール特有の音に対しては、世界の常識がかえって邪魔をしているのではないか?

そこで非常識な賭けに出た。現地で録られた正解付きデータ──たったの59ファイル──だけを使って学ぶAIを、一から作ってみたのだ。普通の感覚では「データが少なすぎて学習にならない」と一蹴される発想だ。だが初心者ゆえ、その常識を知らなかったぶん、迷わず張れた。

3-2. 第一の大逆転 ── 比率を上げるほど伸びる恐怖

この“現地特化AI”を、他のAIたちの多数決に少しだけ混ぜてみた。比率10%。点が上がった。20%、また上がった。そこから先は恐怖に近い体験だった。混ぜる比率を上げるたびに、過去最高を更新し続けるのだ。

現地AIの比率 本番LB
60% 0.801(初の0.8突破)
80% 0.805
90% 0.808
100%(このAI単独) 0.851

そして比率を100%──つまり他の賢いAIを全部捨てて、現地AI単独にした瞬間、点数は 0.808 から 0.851 へ歴史的なジャンプ を見せた。

種明かしはこうだ。賢いAIたちは、現地AIが確信を持って出した正しい判断を、多数決で薄めて殺していた。第2幕の仮説──「似た意見をいくら足しても無駄」──には、さらに先があった。足を引っ張る意見は、引き算したほうが勝つ。教科書は「足せ」と言う。だが、このコンペの正解は「引け」だった。

3-3. 第二の大逆転 ──「いつ・どこで録ったか」という宝の山

勢いに乗って仕上げの後処理を片っ端から試した。多くは空振りだったが、「その場所にいない鳥を候補から外す」(+0.004)、「順位の情報を少し混ぜる」(+0.007) が当たった。

そして、最大の鉱脈を掘り当てた。録音データには「いつ・どこで録ったか」という情報が付いている。これを使い、その場所・その時間帯に鳴きやすい鳥を推定して予測を補正してみたのだ。結果は いきなり +0.030。これまでの改善が0.001刻みだったことを思えば、桁違いの当たりだった。

パンタナールは湿地・森林・草原で生息する鳥がまるで違う。だから「場所」だけで候補を大きく絞れる。当たり前すぎて誰も真剣に集計していなかった情報だ。データを素直に集計して活かすという、バックエンドエンジニアの地味な習性が、ここで効いた。

3-4. 仕上げと、最後の壁(0.904で着地)

最後に、発想の違う別タイプの専門AIを混ぜて、点数は 0.903 → 0.904 に届いた。

だが、ここが限界だった。これ以降は何をしても点はぴくりとも動かない。公開されている上位の参加者は0.950に達していて、その差は最後まで埋まらなかった。正直に書けば、これは初心者の力不足だ。

3-5. 数字で振り返る6週間

指標 数値
期間 約6週間(4/12〜6/2)
投入したAIの種類 7系統以上
試した施策(RUN) 33
凍結(ボツ)にした軸 多数
最高LB 0.904(出発点 0.532 から +0.372)

3-6. 得られた知見

ML面(初心者の学び)

  • 練習点(CV)と本番点(LB)は別物。手元の自己採点が高くても本番で悪化することが何度もあり、この食い違いに最後まで悩まされた。
  • 効いたのは派手なモデルではなく、“現地データ”と“場所・時間の文脈”という地味な情報だった。
  • 多様性のない追加は無意味。似た判断をするものは、何個足しても結果が変わらない。

エンジニアリング面(この記事の核)

  • MLの専門知識が浅くても、Kaggleは戦える。武器は、自動化・実験管理・そして「効かないものを見切る判断」。すべてソフトウェアエンジニアの基礎体力そのものだ。
  • 勝負を分けたのは、賢いAIを全部捨てる「賭け」と、効かない施策を切る「撤退」。皮肉にも、初心者だったからこそ常識に縛られず賭けられた

3-7. 次の一歩、そして反省

正直な反省を書く。一番効いた手──現地データと場所・時間の文脈──に気づくのが遅すぎた。 どちらも終盤の2週間で見つけた施策で、もっと早く着手していれば、裏切りAIたちに溶かした時間を別のことに使えた。

そしてもう一つ。序盤に「信頼できる物差し(手元で本番点を正しく予想できる検証の仕組み)」を作っておくべきだった。これがあれば、本番前に多くの空振りを見抜けた。本業で言う「テストと監視を先に整える」話と同じで、畑が違っても効く原則は同じだった。

ML初心者のバックエンドエンジニアでも、エンジニアの戦い方で本気のコンペに食らいつけた。0.532から0.904まで、6週間で這い上がれた。次に挑むときは、最初の2週間で物差しを作るところから始めたい。

鳥の声は、最後までいろいろなことを教えてくれた。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?