# スパムをフィルタリングする分類モデルを作成

このシナリオでは、Spark Batchジョブを作成します。使う主要コンポーネントは、次のとおりです。

* tModelEncoder: いくつかのtModelEncoderコンポーネントは、指定されたSMSテキストメッセージを機能セットに変換するために使います。

* tRandomForestModel: tModelEncoderから受信する機能を分析して、ジャンクメッセージまたは通常のメッセージがどのように見えるかを理解する分類モデルを構築します。

* tPredict: 新しいジョブでこの分類モデルを適用して一連の新しいSMSテキストメッセージを処理し、スパムと通常のメッセージを分類します。このシナリオでは、tPredictによって処理されるメッセージの分類は既知であり、明示的にマークされているため、この分類の結果を使ってモデルの精度が評価されます。

* tHDFSConfiguration: このコンポーネントは、ジョブに依存するjarファイルの転送先となるHDFSシステムに接続するために、Sparkによって使用されます。

このシナリオは、サブスクリプションベースのビッグデータ対応のTalendプラットフォーム製品およびTalend Data Fabricにのみ適用されます。

## 始める前に

* [Run] (実行)ビューの[Spark configuration] (Spark設定)タブで、ジョブ全体でのSparkクラスターへの接続を定義します。また、ジョブでは、依存jarファイルを実行することを想定しているため、Sparkがこれらのjarファイルにアクセスできるように、これらのファイルの転送先にするファイルシステム内のディレクトリーを指定する必要があります。

  * Yarnモード(YarnクライアントまたはYarnクラスター):

    * Google Dataprocを使用している場合、[Spark configuration] (Spark設定)タブの[Google Storage staging bucket] (Google Storageステージングバケット)フィールドにバケットを指定します。

    * HDInsightを使用している場合、[Spark configuration] (Spark設定)タブの[Windows Azure Storage configuration] (Windows Azure Storage設定)エリアでジョブのデプロイメントに使用するブロブを指定します。

    * Altusを使用する場合は、[Spark configuration] (Spark設定)タブでジョブのデプロイにS3バケットまたはAzure Data Lake Storageを指定します。

    * オンプレミスのディストリビューションを使用する場合は、クラスターで使われているファイルシステムに対応する設定コンポーネントを使用します。一般的に、このシステムはHDFSになるため、[tHDFSConfiguration](https://help.qlik.com/talend/r/ja-JP/8.0/components/hdfs/thdfsconfiguration)を使用します。

  * [Standalone mode] (スタンドアロンモード): クラスターで使われているファイルシステム([tHDFSConfiguration Apache Spark Batch](https://help.qlik.com/talend/r/ja-JP/8.0/components/hdfs/thdfsconfiguration-properties-for-apache-spark-batch)や[tS3Configuration Apache Spark Batch](https://help.qlik.com/talend/r/ja-JP/8.0/components/amazon-s3/ts3configuration-properties-for-apache-spark-batch)など)に対応する設定コンポーネントを使用します。

    ジョブ内に設定コンポーネントがない状態でDatabricksを使用している場合、ビジネスデータはDBFS (Databricks Filesystem)に直接書き込まれます。

* SMSテキストメッセージのセットをダウンロード:

  * 分類モデル: [trainingSet.zip](https://help.qlik.com/talend/ja-JP/components/8.0/Content/Resources/attachments/trainingSet.zip)のトレーニングに使用するセット。
  * 作成されたモデルの評価に使用するセット: [testSet.zip](https://help.qlik.com/talend/ja-JP/components/8.0/Content/Resources/attachments/testSet.zip)。

  Talendは、https://archive.ics.uci.edu/ml/datasets/SMS+Spam+Collectionからダウンロード可能なデータセットからこれら2つのセットを作成しました。データセットプレパレーションジョブ(dataset\_preparation.zip)を使って3つの機能カラム(通貨記号の数、数値の数、感嘆符の数)を生データセットに追加し、データセットを比例的に分割しています。

  ジャンクメッセージの例は次のとおりです。

  ```
  Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C's apply 08452810075over18's
  ```

  通常のメッセージの例は次のとおりです。

  ```
  Ahhh. Work. I vaguely remember that! What does it feel like? Lol
  ```

  情報メモ注: 生データセットに追加された新しい機能は、特にこのシナリオで使ったジャンクメッセージを観察した結果として発見されました(これらのジャンクメッセージには価格のマークや感嘆符が含まれている場合が多いです)。したがって、分析しようとしているあらゆるジャンクメッセージに対して一般化することはできません。さらに、データセットはランダムに2つのセットに分割されてそのまま使われますが、実際には、分類モデルをより適切にトレーニングするために、データセットバランシングなどのさまざまな方法を使って前処理を続けることができます。

* Sparkの[Yarn client] (Yarnクライアント)モードを使ってTalend Sparkジョブを実行し、このシステムとの間でデータを読み書きする適切な権利とアクセス権限を持っている場合、2つのセットは、ジョブが実行されるマシン(たとえばYarnクラスターのHDFSシステム)に保管する必要があります。

  このシナリオでは、Spark [Yarn client] (Yarnクライアント)が使われ、データセットは関連するHDFSシステムに保管されます。

* 使うSparkクラスターは適切に設定され、実行されている必要があります。

### このセクション内

* [ランダムフォレストを使って分類モデルを作成する](https://help.qlik.com/talend/ja-JP/components/8.0/machine-learning/tmodelencoder-tpredict-ts3configuration-creating-classification-model-using-random-forest-spark-batch-component)
* [分類モデルを評価する](https://help.qlik.com/talend/ja-JP/components/8.0/machine-learning/evaluating-classification-model)

**関連概念**

[tModelEncoder](https://help.qlik.com/talend/ja-JP/components/8.0/machine-learning/tmodelencoder "特徴化操作を実行して、データをtLogisticRegressionModelやtKMeansModelなどのモデルトレーニングコンポーネントで期待される形式に変換します。")

[tPredict](https://help.qlik.com/talend/ja-JP/components/8.0/machine-learning/tpredict "エレメントの状況を予測します。")

**関連資料**

[tRandomForestModel](https://help.qlik.com/talend/ja-JP/components/8.0/machine-learning/trandomforestmodel "特徴ベクターを分析します。")

**関連情報**

[tHDFSConfiguration](https://help.qlik.com/talend/ja-JP/components/8.0/hdfs/thdfsconfiguration)

[tFileInputDelimited](https://help.qlik.com/talend/ja-JP/components/8.0/delimited/tfileinputdelimited)

[tReplicate](https://help.qlik.com/talend/ja-JP/components/8.0/orchestration/treplicate)

[tJava](https://help.qlik.com/talend/ja-JP/components/8.0/java-custom-code/tjava)

[tLogRow](https://help.qlik.com/talend/ja-JP/components/8.0/logs-and-errors/tlogrow)

[tFilterColumns](https://help.qlik.com/talend/ja-JP/components/8.0/processing/tfiltercolumns)

[tS3Configuration](https://help.qlik.com/talend/ja-JP/components/8.0/amazon-s3/ts3configuration)