ジェドと私が来ました。マウンテンバイクのサスペンションについてお話します。そして、JMPで見つけた便利なツールについてお話しします。これらのツールは、サスペンションとインターネットで見かけるレビューとの相関関係を理解するのに役立ちました。この講演は、昨年のディスカバリーサミットで生まれたものです。ジェドと初めて会った時、私は「Functional Data Explorerって何?Functional Data Explorerってどうやって使えるの?そして、どんなメリットがあるの?」と知りたくてたまらなかったんです。ジェドは私のことを少し知っていたので、マウンテンバイクの話を始めたんです。私にとっては、マウンテンバイクの話は簡単に持ち込めました。ワクワクしました。それが最終的に、このプレゼンテーションにつながったのです。
私たちとこのプレゼンテーションについて、少しだけ免責事項を申し上げます。私たちは自転車メーカーとは一切関係ありません。業界の専門家でもありません。Bike Radarからレビューをいくつか引用し、彼らがどのように自転車を評価しているかを参考にしました。そして、インターネットで公開されているLinkageというソフトウェアからサスペンションカーブをいくつか引用しました。
このプレゼンテーションは、次にどの自転車を買うべきかを決めるためのものではありません。それは私たちの意図ではありません。私たちの目的は、JMPに搭載されている非常に優れた強力なツールをいくつか紹介し、従来は理解しにくいデータを理解するのに役立つツールを紹介することです。
本題に入る前に、マウンテンバイクとその仕組みについて少しお話しましょう。マウンテンバイクには通常、フロントサスペンションとリアサスペンションがあります。フロントサスペンションは非常にシンプルで、フォークに沿って直線的に上下に動きます。リアサスペンションははるかに複雑です。後輪が上下に動き、通常は何らかのリンケージによってその動きがバイクのフレーム中央にあるショックアブソーバーに伝えられます。このリンケージには様々な特性があり、ここでは5つに分けて説明します。
しかし、最も理解しやすいのはおそらくレバレッジ比でしょう。つまり、ホイールが1ミリメートル動いた場合、ショックアブソーバーはどれだけ圧縮されるかということです。ショックアブソーバーも1ミリメートル圧縮されますか?この場合、レバレッジ比は1になります。ショックアブソーバーの圧縮量がはるかに少ない場合、レバレッジ比は大きくなり、その値はホイールの移動量全体にわたって変化します。ホイールが動くと、その値も変化し、自転車のリンケージを定義する曲線、つまり機能データが得られます。
私たちはこれらの曲線を5つ選びました。1つ目はアンチスクワットです。これは、自転車が加速するとどのように反応するかに関係しています。ペダルを漕ぐと、自転車は前方に傾きますか、それともトラベル量に応じて沈み込みますか、それとも比較的水平を保ちますか?アンチスクワットは、サスペンションが加速力にどのように反応するかに関係しています。
アンチライズもまた、ブレーキをかけた時、つまり減速した時に、バイクが前方に傾くか、サスペンション内で圧縮されるかといった特性の一つです。アンチライズは、バイクの特性を決定したり、バイクの性能を向上させるために、バイクデザイナーが調整する特性の一つです。
レバレッジ比について少しお話しました。これは、ホイールがどれだけ動くとショックアブソーバーがどれだけ圧縮されるかを表すものです。レバレッジ比の非常に興味深い点は、プレゼンテーションの最後にもう少し詳しく説明しますが、特定のショックアブソーバーに合わせて調整されることです。自転車にはエアサスペンションとコイルサスペンションがあり、どちらを使用しているかによってレバレッジ比の曲線が異なります。重要なのは、レバレッジ比は調整されますが、単独で調整されるのではなく、使用しているショックアブソーバーの種類にも大きく依存するということです。
アクスルパスもその一つです。車輪が上昇するとき、かなり後方に移動するのでしょうか、それとも上下にまっすぐ移動するのでしょうか、それともわずかに前方に移動するのでしょうか。このグラフでは、Y軸が車輪の移動距離、X軸が前後方向の位置を示しています。車輪はゼロから始まります。そして、この青いグラフでは、車輪が最初にわずかに後方に動いてから前進しているのがわかります。トレイルを走行しているとき、前進しているときは、車輪が前に出て障害物にぶつかるよりも、後ろに動いて障害物を避けるようにしたいはずです。アクスルパスは、自転車にとってどのようなメリットがあるかという点で、非常に直感的に理解しやすいものです。
最後にペダルのキックバックです。これは、ホイールが動いているときにペダルとホイールの間の距離が少し広がることで、ペダルがライダーの後ろ側にずれてしまう現象です。これは一般的に良くありません。自転車に乗っているときに、不安定な感覚を引き起こす可能性があります。
これらが私たちが関心のある曲線です。これが私たちが関心のある空間であり、これら全てをリンクから外すことができます。さて、問題は、どうやってレビューを取得するかということです。私はJMP 18以前の環境に戻っていますが、Pythonスクリプトを書くことができます。このPythonスクリプトの仕組みについては詳しく説明しません。ご質問があれば、お気軽にご連絡ください。喜んでお答えします。これは、JMPで実行するPythonスクリプトをデスクトップに用意しているということです。このPythonスクリプトはBike Radarにアクセスし、多数のレビューを収集し、JMPデータテーブルをいくつか生成して、それを確認できるようにします。
まず1つ目は、この概要表です。これはバイクのレビューに関するメタデータを提供します。バイクの種類、フルレビューなのか、長期レビューなのか、初乗りレビューなのか、公開日などが分かります。また、短期コメント、総合評価、URL、バイクの種類、そして著者も表示されます。そして、レビューの核心部分です。ここでもバイク、具体的なセクション、そしてレビュー本文が分かります。
ここで収集した各レビューには3つの要素があります。まず、登り坂セクション、下り坂セクション、そして最後に結論セクションです。各バイクについて、これらのセクションをそれぞれ用意することで、バイクの登り坂性能は良好か?山をうまく登れるか?下り坂性能は良好か?下り坂の安定性は良好か?そして、全体として、レビュー担当者はそのバイクについてどのように感じたかを確認することができます。
ここで分析を行うために使用する2つの要素について説明しました。曲線はリンクソフトウェアで生成でき、レビューも用意されています。
さて、これらすべてをJMPが理解し、実際に分析できる形式にするにはどうすればよいでしょうか?そのためには、リンク機能によって画像を取得する必要があります。問題は、その画像をJMPが理解できる形式にするにはどうすればよいかということです。
JMPのすごいところは、つい最近気づいたのですが、画像が開けるんです。そのためには少しJSLを書かなければなりませんが、そうすると画像を取り込んで、X座標とY座標を示す表を出力できます。これは、ピクセルが空間内、あるいは画像内のどこに位置しているかを示し、画像内の各ピクセルの赤、緑、青の値も表示してくれます。
素晴らしいですね。それでもまだ目的の曲線は得られません。この曲線は必要ですが、もっと近づけます。もし青い値をすべて取り出せれば… そうですね、青い値をすべて取得して、それをこのグラフ空間にマッピングできれば、曲線を生成できます。
ワークフロービルダーは本当に気に入っています。グラフィカルに操作して結果を得ることができるので、作業がずっと楽になります。そこで、K平均法クラスタリングを行う簡単なワークフローを構築しました。この画像は3色しかないのがいいですね。3つのグループを生成し、それぞれのクラスターの式をテーブルに保存すれば、このテーブルからXとYの位置を表すグラフが作成され、クラスターの式で色分けできます。クラスターの式1は、すべての青色ピクセルを表しています。これを使って、「さて、ここに青色のピクセルがあります。では、これらの位置はどこでしょう?画像全体におけるそれらの位置は分かっています。このグラフ上の位置にマッピングする必要があります」と判断できます。
もう一度言いますが、少し細かい話になるので詳しく説明しません。ただ、最終的に私たちが作成したスクリプトがどのようなものかをお見せします。
画像が表示され、「このグラフのXmin、Xmax、Ymin、Ymaxを入力してください」と表示されます。0から130、そして0.45から1.35を入力します。「OK」をクリックします。これで…すべてをここにドラッグします。X値、Y値、そして注目している物件と自転車を含むデータテーブルが作成されます。これはサンプル画像ですが、最初のグラフがこちらです。これが抽出されたグラフです。これらの値を入力し、青いピクセルを見て、「これでグローバル位置が与えられ、定義した0~130ミリメートルの空間にどのようにマッピングされるか」を計算しました。
言うまでもなく、これは完璧なプロセスではありませんが、レイアウトはかなりうまくいきます。それぞれの曲線を以下に示します。少し時間がかかります。ある晩、ジェドと私は2人で数時間かけて数値を入力しましたが、しばらくすると、確認できるすべての曲線が完成しました。
ここで、「では、テキストで何をしたか? どのようにしてテキストを使用可能な形式に変換したか?」についてお話しします。
ありがとう、ランドン。ランドンが言ったように、テキストファイルがあり、ファイルは3つの別々のCSVファイルとして保存されています。1つは上昇部分、1つは結論部分、そして下降部分です。これらはデスクトップに保存しました。ご存知ないかもしれませんが、「複数ファイルのインポート」という便利な機能があります。私たちはそれを使いました。しかし、ここでも時間節約のため、少しズルをしてスクリプトを実行することにします。これにより、基本的にこれら3つのファイルすべてが1つのJMPファイルにインポートされました。右クリックでコードを再生成するちょっとした魔法を使えば、ファイル名を「結論、下降、上昇」に変更できます。
これでデータのフォーマットが完了し、準備完了です。準備完了とはどういうことでしょうか?各フィールドのテキストを数値に変換し、操作や統計処理に使えるようにする必要があります。JMPの私のお気に入りでありながら、あまり使われていない機能の一つがテキストエクスプローラです。実にシンプルです。列にテキストがある場合は、それがテキストです。他のものは基本的に無視して構いません。他には何も使わないからです。これはかなり簡単な作業です。
ちなみに、感情分析はJMP Proの機能です。JMP Proをお持ちであれば、この感情分析ツールをご利用いただけます。このツールは、基本的にすべてのテキストを分析し、感情スコア、つまり感情スコアを割り当てます。レビュー担当者がこれらの自転車について概ね肯定的な評価をしていることがすぐにわかります。
しかし、ここで一つ指摘しておきたいのは、テキストキュレーションという概念があるということです。「ペダルボブ」という単語までスクロールダウンすると、妙な響きがします。これは誰かがボブにペダルを踏めと指示しているわけではありません。マウンテンバイクでは、ペダルを踏むとサスペンションが上下に揺れる現象を指し、これは良くない現象です。JMPはこの奇妙な「ペダルボブ」という単語を考慮に入れているのでしょうか?デフォルトでは考慮されていませんが、簡単に追加できます。感情分析を使ってこれを行います。これらの感情用語を管理します。入力できる場合は、「ペダルボブ」と入力できます。マイナス50のスコアを付けて、それを追加できます。そして、ここで「OK」をクリックすると、スコアが少しだけ変化することに注目してください。これは簡単なことですが、時間がかかります。
たくさんの用語があります。これは実は土曜日にランドンが文書を調べてキュレーションを行い、感情を表す用語をテキストファイルに保存したんです。基本的に一度手作業で行いました。その後、JMPがそれらをクリップボードにコピーするので、Vキーを押して貼り付けます。ここで「OK」をクリックすると、調整が表示されます。否定形と強意語の用語もテキストファイルで同じように操作できます。ただ、コピー&ペーストするのを見てもらうよりも、少し手っ取り早くやってみましょう。
これが、このコーパス、つまりこのドキュメントセット用にローカライズされたすべてのデータです。言語の準備ができたので、これらのスコアを信頼し始めます。スコアを信頼できたので、何か処理を行いたいと思います。処理するには、赤い三角形をクリックして「ドキュメントスコアを保存」をクリックするのが最も簡単な方法でしょう。それからテーブルを開きます。以前はテキストだけだったこのテーブルには、肯定的感情と否定的感情の数値、そして全体的な感情を表す列がいくつか追加されています。
これでほぼ準備完了です。あとは、tabulate関数を使ってデータをもう少し細かく分類し、登り坂では全体的なプラスとマイナス、結論では全体的なプラスとマイナス、そして下降傾向を把握するだけです。これをデータテーブルにすれば、すぐに使えるデータになります。それぞれの自転車のデータがあり、登り坂、下り坂、そして全体的なデータがあります。つまり、グラフビルダーを使って、下降傾向と登り坂の全体的なデータを比較できるということです。「さて、これが自転車です。結論を出すとしたら、両方に優れた自転車はこれです」といった具合です。要するに、これでデータを使って作業する準備が整い、そのデータから、その自転車の良し悪しを示す値が得られます。それでは、Landonの話に戻りましょう。
分かりました。ジェド、ありがとう。ジェドが作成したのと同じ表があります。自転車の感情、そして登り、下り、そして終わりの各カテゴリーにおける全体的な感情、肯定的な感情、否定的な感情が示されています。これで完了です。それから、全ての画像を調べて、この曲線表を作成しました。
このテーブルはバイクごとに用意されており、プロパティがあります。アンチスクワットがあります。スクロールすると、アンチライズ、リアパス、その他様々なプロパティがあることがわかります。そして…Xはバイクがトラベルのどの位置にあるか、Yはトラベルのどの時点でのプロパティの値です。
私たちが行ったことの一つは、これらの自転車には大きなばらつきがあることに気づいたことです。100ミリメートルのトラベルの自転車もあれば、ホイールが100ミリメートルしか動かない自転車もあり、180ミリメートルのトラベルの自転車もありました。これが問題を引き起こしていたので、すべてのトラベルを0から1に正規化しました。つまり、ホイールがどれだけ動いたかを見るのではなく、自転車がトラベルの何パーセントまで進んでいるかを見るのです。フルトラベルの50%まで進んでいるのか、それとも最小トラベルまで進んでいるのか、といったことです。
さて、これをFunctional Data Explorerで見るには、少しフォーマットを変えましょう。まず、移動距離の値を順序値にして、表計算ツールに取り込みます。ジェドと私は、このプロジェクトで表計算ツールを多用しました。自転車のデータを取り、移動距離の値をどこに加算するかを指定して、プロパティを取得すれば、「Y値はいくらか?」と分かります。
これをデータテーブルにすると、それぞれの値の移動位置が必ずしも揃っていないため、少し見栄えが悪くなっています。ペダルキックバックの値はありますが、他の値はありません。また、レバレッジ比の値はありますが、何もありません。見た目はあまり良くありませんが、実際には問題はありません。これをFunctional Data Explorerに入力すると、これらの欠損値は非常にうまく処理されます。問題はありません。ですから、これで問題ありません。
もう一つできることは、このテーブルを結合することです。自転車のレビュースコアがすべて入ったテーブルと結合する必要があります。最も簡単な方法は仮想結合です。ここに来てリンクIDを呼び出し、そしてここに来てリンク参照を作成するだけで、クリーンなシステムを構築できます。これを呼び出してみましょう。
ご覧の通り、カーブデータはすべてここにあります。バイク、トラベルのどの位置にあるか、アンチライズ、アンチスクワット、レバレッジ比、ペダルキックバック、リアパスの平均値が示されています。さらに、感情スコアもすべてここにあります。
さて、これをFunctional Data Explorerに取り込み、これらの感情が曲線の形状とどのように関連しているかを調べてみましょう。Specialized ModelingのFunctional Data Explorerに入り、今すぐその一つを見てみましょう。リアパスです。X入力には正規化された移動距離を入力し、IDにはバイクの名前を入力します。そして、本当の魔法は、すべての感情スコアを補足フィールドに追加することです。
機能データエクスプローラーを実行すると、これらの曲線は非常に滑らかで、リンク機構から生成されているため、Bスプラインが非常によくフィットします。これらすべてにBスプラインをフィットさせると、ほとんどの変動は形状関数1にあることがわかります。診断プロットを見てみると、コンポーネント1に大きな変動があることがわかります。コンポーネント2には大きな変動はありません。ここにマウスポインタを置くと、「この自転車を見ると、車軸の軌跡が大きく前進しています。そして反対側の端では、車軸の軌跡が大きく後退しています。これらが両極端です」と分かります。
これを実行したら、追加データに関するBスプライン曲線を作成できます。Z因子を追加したので、この関数DOE分析を行うことができます。これにより、感情スコアとその後の見通しとの関係が構築されます。これらの用語が長すぎるため、少し読みにくいですが、最初の3つは、登山に対する全体的な感情、肯定的な感情、そして否定的な感情です。
登坂のみに注目し、登坂に対する全体的な感情が非常に良好で、かつ登坂に対する否定的な感情が非常に低い、もしくは非常に良好であることを目標とすると、バイクの状態、つまり後方のパスの状態は次のようになります。これは非常に標準的な後方パスであることがわかります。前方にも後方にも大きく動いていません。つまり、後方パスの概要を把握できるということです。このプロセスを、それぞれのパスに対して繰り返すことができます。これが私たちが行ったことであり、予測式を保存しておいたものです。
そして最後に、これらすべてを組み合わせて、すべてのレビューとまとめたすべての曲線に基づいて、レビューと曲線がどのようにリンクしているかを示すプロファイラーを作成しました。
結論の部分です。肯定的、否定的、そして全体的な結論です。そして、肯定的、否定的、全体的な登坂スコア、肯定的、否定的、全体的な下りスコアがあります。では、「下り坂に非常に有利なバイクが欲しい」という状況を見てみましょう。つまり、下り坂の全体的なスコアです。下り坂ではあまり否定的ではなく、肯定的スコアを高くしたいのです。
これは何をするのでしょうか?この後輪を先ほど見た後輪と比べると、こちらの方がかなり後方に弧を描いています。なるほど、なるほど。これは、トレイルで何かにぶつかった時に後輪が後ろに動いて邪魔にならないようにする自転車の挙動に似ています。下り坂で岩にぶつかった時も、後輪が後ろに動いて邪魔にならないようにするのです。
もう一つ指摘したいのは、このレバレッジ比です。これは先ほども少し触れましたが、マウンテンバイクには様々なタイプのショックアブソーバーがあります。コイル式ショックアブソーバーとエアサスペンション式ショックアブソーバーです。詳細は省きますが、これはコイル式ショックアブソーバーに期待されるレバレッジ比です。ダウンヒルに特化したバイクを見てみると、すべてコイル式ショックアブソーバーが搭載されています。現在、業界の大きなトレンドは、ダウンヒルバイクにコイル式ショックアブソーバーを搭載することです。コイル式ショックアブソーバーは性能が非常に優れているため、私たちのデータもそれを裏付けています。
逆の視点も考えてみましょう。下りはそれほど重要ではありませんが、登りはしっかりとしたものにしたい。ワールドカップに出場できるバイクを作りたい。リアパスも少し変わり、アンチライズも少し変化しています。レバレッジ比は、エアサスペンションでより一般的に採用されるレバレッジ比です。エアサスペンションは登りに特化したバイクで採用されることが多く、軽量化も期待できます。このカテゴリーのバイクとしては、はるかに優れたパフォーマンスを発揮するでしょう。
ここでの考え方は、繰り返しになりますが、「自転車はこう設計すべきだ」と示そうとしているのではなく、「非常に複雑なデータがある」と示そうとしているということです。ウェブサイトのレビュー担当者からのレビューもあります。グラフとして取り込まれる曲線もあり、JMPを使うことでこれらすべてをまとめてダッシュボードに統合できます。このダッシュボードは、「レビューとレバレッジ比率がどのように関連しているか」を理解するのに非常に役立ちます。そして、単に「まあ、こうあるべきだ」という見方ではなく、より厳密に理解するのに役立つ情報も得られます。
以上が今回お伝えした内容です。重ねて申し上げますが、ご質問がございましたら、お気軽にお問い合わせください。お時間をいただきありがとうございました。