データサイエンスコンペ TianChiに挑む！(実践編)

前回TianChiの<strong><a href="https://techblog.sbcloud.co.jp/2018/07/11/tianchi_1/">紹介編</a></strong>の話をさせて頂きましたが、今回は実際のコンぺを交えながら、データのダウンロード・前処理・訓練・予測・提出までの一連の流れをご紹介させて頂きたいと思います。


<span style="font-size: 18pt;"><strong>コンテストの概要</strong></span>

今回取り上げた例としては『<a href="https://tianchi.aliyun.com/getStart/introduction.htm?raceId=231593&amp;_lang=en_US"><strong>Offline to Online (O2O) Prediction of Coupon Redemption</strong></a>』となりますが、まずコンテストの背景を簡単に説明させて頂きたいと思います。

<span style="font-size: 12pt;"><strong>O2O</strong> (オンラインからオフライン) とは、オンラインからオフラインへ送客するためのWebマーケティングの施策だといいます。例えば、オンラインで割引クーポン券を配布したり、商品広告やチラシを出し</span><span style="font-size: 12pt;">たりすることが、よく使われる手段です。</span>

<span style="font-size: 12pt;">ただし、このようなマーケティング施策は１つ課題があります。不特定多数のユーザーに訴求できる一方、お客様にとっては、欲しいクーポンを貰うなら当然満足しますが、欲しくない場合は、数多くのクーポンをひたすら送られると、逆効果になる恐れがあります。</span>

<span style="font-size: 12pt;">そのため、今回のコンテストでは、O2Oリアルシーンに関するデータセットが提供され、お客さんが配布されたクーポン券が<strong>指定期間中（15日以内）</strong>にオフラインでの利用率はどれくらいなのかを予測できるモデルを応募しております！</span>

<ul style="list-style-type: square;">
<li><strong><span style="font-size: 14pt;">データの概要</span></strong></li>
</ul>
今回訓練用データセットとして与えられるのは、オフラインでクーポンの使用状況のデータとオンラインでクーポンの受領状況のデータです。
2016/01/01から2016/06/30まで半年間以内にオフラインでクーポンの使用状況のデータ（ccf_offline_stage1_train.zip）

<table style="width: 577px;">
<tbody>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">項目</td>
<td style="width: 425px; height: 25px;">説明</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">User_id</td>
<td style="width: 425px; height: 25px;">ユーザーID</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Merchant_id</td>
<td style="width: 425px; height: 25px;">店舗ID</td>
</tr>
<tr style="height: 5px;">
<td style="width: 138px; height: 5px;">Coupon_id</td>
<td style="width: 425px; height: 5px;">クーポンID。※ Nullの場合、クーポンが使われてないを指します。</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Discount_rate</td>
<td style="width: 425px; height: 25px;">２つタイプがあります。

0&lt;x&lt;1 (割引率。例えば, 0.3, 0.8)

x:y (x人民元以上購入する場合、y人民元OFF。例えば, 100:20, 200:40)</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Distance</td>
<td style="width: 425px; height: 25px;">
<div data-type="p">ユーザーの家から店舗までの距離</div></td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Date_received</td>
<td style="width: 425px; height: 25px;">クーポンをもらった時の日付</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Date</td>
<td style="width: 425px; height: 25px;">クーポンを利用した時の日付</td>
</tr>
</tbody>
</table>
2016/01/01から2016/06/30まで半年間以内にオンラインでクーポンの受領状況のデータ（ccf_online_stage1_train.zip）

<table style="width: 577px;">
<tbody>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">項目</td>
<td style="width: 425px; height: 25px;">説明</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">User_id</td>
<td style="width: 425px; height: 25px;">ユーザーID</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Merchant_id</td>
<td style="width: 425px; height: 25px;">店舗ID</td>
</tr>
<tr style="height: 5px;">
<td style="width: 138px; height: 5px;">Coupon_id</td>
<td style="width: 425px; height: 5px;">クーポンID。※ Nullの場合、クーポンが使われてないを指します。</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Discount_rate</td>
<td style="width: 425px; height: 25px;">２つタイプがあります。

0&lt;x&lt;1 (割引率。例えば, 0.3, 0.8)

x:y (x人民元以上購入する場合、y人民元OFF。例えば, 100:20, 200:40)</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Action</td>
<td style="width: 425px; height: 25px;">
<div data-type="p">0:ただクリックするだけ</div>
<div data-type="p">1:オンラインで購入する</div>
<div data-type="p">2: クーポンを受領する</div></td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Date_received</td>
<td style="width: 425px; height: 25px;">クーポンをもらった時の日付</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Date</td>
<td style="width: 425px; height: 25px;">クーポンを利用した時の日付</td>
</tr>
</tbody>
</table>
そして、テストデータセットとしては、2016/07/01から2016/07/30まで一ヶ月間以内のオフラインデータで、訓練データと異なり、クーポンを利用した時の日付の項目（'Date'）が含まれてないことを確認することができます。

<table style="width: 577px;">
<tbody>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">項目</td>
<td style="width: 425px; height: 25px;">説明</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">User_id</td>
<td style="width: 425px; height: 25px;">ユーザーID</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Merchant_id</td>
<td style="width: 425px; height: 25px;">店舗ID</td>
</tr>
<tr style="height: 5px;">
<td style="width: 138px; height: 5px;">Coupon_id</td>
<td style="width: 425px; height: 5px;">クーポンID。※ Nullの場合、クーポンが使われてないを指します。</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Discount_rate</td>
<td style="width: 425px; height: 25px;">２つタイプがあります。

0&lt;x&lt;1 (割引率。例えば, 0.3, 0.8)

x:y (x人民元以上購入する場合、y人民元OFF。例えば, 100:20, 200:40)</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Distance</td>
<td style="width: 425px; height: 25px;">
<div data-type="p">ユーザーの家から店舗までの距離</div></td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Date_received</td>
<td style="width: 425px; height: 25px;">クーポンをもらった時の日付</td>
</tr>
</tbody>
</table>
<ul style="list-style-type: square;">
<li><span style="font-size: 14pt;"><strong>評価方法：</strong></span></li>
</ul>
2016年7月に各クーポンを貰った時点から15日以内にクーポンの利用率が求められます。最終評価点数の計算方法としては、<span style="font-size: 12pt;">各クーポンの利用率をもとにAUC値（ROC曲線下の面積）を個別に計算し、さらにすべてのクーポンの AUC 値の平均値（0と1の間</span><span style="font-size: 12pt;">）となります。その平均値（0.5以上）が大きければ、予測精度が高いと意味します。</span>
※ AUCの詳細にこちらに省略しますが、ROC曲線とAUCの説明は<strong><a href="https://en.wikipedia.org/wiki/Receiver_operating_characteristic">Wiki</a></strong>をご参照ください。

<ul style="list-style-type: square;">
<li><span style="font-size: 14pt;"><strong>提出データの形式</strong></span></li>
</ul>
<table style="width: 577px;">
<tbody>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">User_id</td>
<td style="width: 425px; height: 25px;">ユーザーID</td>
</tr>
<tr style="height: 25px;">
<td style="width: 138px; height: 25px;">Coupon_id</td>
<td style="width: 425px; height: 25px;">クーポンID</td>
</tr>
<tr style="height: 5px;">
<td style="width: 138px; height: 5px;">Date_received</td>
<td style="width: 425px; height: 5px;">クーポンをもらった時の日付</td>
</tr>
<tr style="height: 5px;">
<td style="width: 138px; height: 5px;">Probability</td>
<td style="width: 425px; height: 5px;">クーポンの利用率<strong>（15日以内）</strong></td>
</tr>
</tbody>
</table>

<span style="font-size: 18pt;"><strong>実行方法：</strong></span>

<ul style="list-style-type: square;">
<li><span style="font-size: 14pt;"><strong>事前準備：</strong></span></li>
</ul>
まず、データセットをダウンロードする前に、下図のように、「Sign up」をする必要があります。
<img class="alignnone size-full wp-image-2920" src="https://techblog.sbcloud.co.jp/assets/2018/07/12345.png" alt="" width="883" height="220" />

「Source of information」撰択リストから該当の項目を撰択してから「Next」をクリックしてください。

<img class="alignnone size-full wp-image-2923" src="https://techblog.sbcloud.co.jp/assets/2018/07/3_2.png" alt="" width="885" height="377" />

そうすると、データセットをダウンロードできるようになります。
<img class="alignnone size-full wp-image-2924" src="https://techblog.sbcloud.co.jp/assets/2018/07/3_3.png" alt="" width="883" height="262" />
<ul style="list-style-type: square;"><li><span style="font-size: 14pt;"><strong>実行詳細</strong></span></li></ul>

チュートリアルのソースコードは以下のjupyther notebookをご参照いただければと思います。

※ 本<span style="font-size: 12pt;">チュートリアルはccf_offline_stage1_train.csvのみを使い、</span>特徴抽出を行いましたが、さらなる改善案として、<span style="font-size: 12pt;">ccf_onfline_stage1_train.csvを連結させて、新たに特徴量を作ることなとが考えられます。また特徴量を畳み込みニューラルネットワークによって自動的に獲得したりすることも考えられます。</span>

![screencapture-gist-github-qfxkd-7361e3b14c980a9dfccb01f194e0e343-2019-10-21-19_14_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265269/890cd72e-bdf8-d818-efd8-571796e05f4f.png)


<ul style="list-style-type: square;">
<li><strong><span style="font-size: 14pt;">提出手順</span></strong></li>
</ul>
最後、下図の手順のように、予測結果（csvファイル）を提出することができます。

<img class="alignnone size-full wp-image-2927" src="https://techblog.sbcloud.co.jp/assets/2018/07/3_4.png" alt="" width="883" height="341" />

<hr/>

皆さん、いかがでしょうか、以上はコンペの一連となります。実際にはTianchiに公開されている各種のコンペがまだ沢山ありますので、データサイエンティストにとらわれず、機械学習を勉強し始めた方でも、ぜひTianchiが提供されているデータをご利用して頂き、練習してください。また多くの皆様のご参加を心よりお待ちしており<wbr />ます！

最後、TianChiシリーズの最終回(<a href="https://techblog.sbcloud.co.jp/2018/08/02/tianchi_2/"><strong>データ処理編</strong></a>)も近々公開したいと思いますので，引き続きよろしくお願いします。