データ分析部お仕事紹介 ~メールマガジン編~

初めまして、データ分析部の大堀です。

データ分析部には様々な業務がありますが、その中の1つに「メールマガジンの配信」があります。

ALBERTでは、ご契約いただいているお客様へ月に1度、データ分析部のメールマガジン「よくわかる!データサイエンス」を配信しています。

配信内容は、様々な分析手法や、商品レコメンドを行う際に活用することが出来る消費者心理、ALBERT社員が登壇するセミナーのお知らせなどをご紹介しており、毎回ご好評いただいております。


今回は、先月お送りした「セグメントの重要性」の一部をご紹介します。

11月配信「セグメントの重要性」(抜粋)


【セグメントとは】

セグメント(segment)は、 一般的に「区切り」「分ける」といった意味があり、ビジネスシーンで使用する際は、「市場を細分化する」という意味で捉えられています。細分化することをセグメンテーションと言い、細分化した1つ1つのかたまりをセグメントと言います。

セグメンテーションは、以前お送りしたSTP分析のステップにも用いられており、市場を細分化することで、細分化された顧客のセグメントごとに具体的な戦略立案を行うことを目的としています。

また、ビジネスでは市場を具体的にどのように細分化するかが重要です。

一般的に、セグメンテーションを行う際には下記のような基準変数を採用します。




このように、セグメンテーションを行う基準はいくつもあるため、どのような基準を採用するかがポイントになります。


【従来のセグメントの問題点と改善するために必要なこと】

従来のセグメンテーションは、デモグラフィック属性と他の基準を組み合わせた指標から顧客をセグメントしていました。

しかし、日毎に増加する情報を得ることによって顧客の嗜好や行動パターンはすぐに変化してしまうため、複数の基準を採用してセグメントを決定しても顧客に沿わなくなってしまうという現象が問題となっています。

この問題を解決するためには、従来セグメンテーションを行う際に使用していた基準よりも更に新しい情報を用いたセグメントで、顧客の最新のニーズに沿った戦略を立てる必要があります。

顧客の最新の情報を得るためには、実際の行動を追えるような購買履歴データや、リアルタイムで更新されるソーシャルデータの活用が重要になります。

それらを用いて定期的にセグメントを更新することで、よりリアルな顧客のニーズに沿ったセグメントを得ることが出来ます。
メールマガジンの情報は、現在行われている研究や事例を元に、データ分析部メンバーの経験を加えたものを文章にしています。社内の本棚には参考資料となる様々なジャンルの書籍が集められており、最新の情報をお届けできるよう心がけております。

また、ALBERTのコーポレートサイトでは、分析の基礎や分析に関する手法について掲載しておりますので、合わせてご覧下さい。


今後も皆様に有益な情報をお届けできるよう、日々情報収集に努めます!

カテゴリー: 日常 | データ分析部お仕事紹介 ~メールマガジン編~ はコメントを受け付けていません。

部内勉強会開催中 ~アナリストのSQL力を高める!~

こんにちは。データ分析部のGOです。

データ分析部では、毎週「研究会」として所属スタッフによる研究発表を持ち回りで行っていますが、本日は特別に当社システム開発部の池内部長を講師に招いて SQL(Redshift) 勉強会を開催していただきました。

2013年11月25日 データ分析部勉強会
(※ちょっと写真が暗いですが…)


これまで当部署では所属するにあたって SQL スキルを必須とはしていませんでしたが、日々扱うデータが膨大になってきて SQL スキルを持たないスタッフがそれらに太刀打ち出来ないシーンに遭遇することも多くなりました。そうした場合には、私をはじめとした SQL スキルを持つスタッフが手助けをしたり、システム開発部への協力を仰いだりすることで対応してきましたが、今後さらに分析対象データが膨れ上がることを考え、SQL スキルを必須とすべくアナリストの SQL 教育に力を入れていきます。

本日の勉強会では Redshift をベースに、まずは SQL の基礎的なことから丁寧にレクチャーしていただき、SQL に触れたことのないスタッフにも興味の湧く内容で理解が深まったようでした。


社員・アルバイト・インターン問わず、データ分析部所属スタッフ全員がSQLマスターとなることを目指します!


ALBERTデータ分析部ではアルバイト・インターンを随時募集しています。 SQL スキルをお持ちの方はもちろん、SQL は使ったことないけどこれから覚えたい、という方も分析業務にご興味がありましたらぜひ当社採用窓口へご一報ください! SQLも基礎から学べます!

カテゴリー: 分析現場 | 部内勉強会開催中 ~アナリストのSQL力を高める!~ はコメントを受け付けていません。

SQLでクロス集計

データ分析部のGOです。ご無沙汰しております。
すっかり更新が滞ってしまっておりましたが、部署内に新しいメンバーも増えましたので今後は彼らの声も交えつつ、あらためてデータ分析の現場からお届けして参りたいと思います。


さて、今日はクロス集計の方法についてです。

クロス集計は、取得したデータにおいて属性やカテゴリごとの傾向を見るための集計で、単純集計だけでは見えないデータの特徴を見出すことができるため、データを分析・解釈する上で基本であり、重要であるといわれます。
(当社コーポレートサイトにクロス集計について詳しく掲載しておりますので、そちらもご参照ください。)

クロス集計が行える身近なツールとしては、まず Microsoft Excel の「ピボットテーブル」や同 Access の「クロス集計クエリ」が思い浮かびますが、データサイズが大きい場合や、集計に用いるデータの抽出条件が複雑であったり、たくさんのクロス集計を行ったりする場合などにはこれらのツールでは処理に時間がかかったり、処理しきれないことがあります。

そこで、非エンジニアの私が独学で身につけた、大きなデータも比較的サクッと扱える SQL でのクロス集計方法をご紹介します。


たとえば、こんな↓データがあるとき。
サンプルデータ

年代×性別ごとの人数を集計して次の様な結果データを SQL で算出してみます。
結果データ

SQLのテーブル上では各列名を以下のように設定しました。
カラム対照表

■ MySQL

SELECT 
	COALESCE(age10s, 'total') AS '年代',  -- ROLLUPによる合計行に「total」を挿入
	COUNT(CASE WHEN sex = 'Man' THEN 1 ELSE NULL END) AS '男性',  
	COUNT(CASE WHEN sex = 'Woman' THEN 1 ELSE NULL END) AS '女性',  
	COUNT(*) AS 'total'  
FROM test 
GROUP BY age10s WITH ROLLUP;
結果はこうなります。
MySQLの結果

■ Microsoft SQLServer
SELECT 
	IsNull(CAST(age10s as varchar(8)), 'total') AS '年代',  -- 年代の値を文字列に変換し、ROLLUPによる合計行に「total」を挿入
	COUNT(CASE WHEN sex = 'Man' THEN 1 ELSE NULL END) AS '男性',  
	COUNT(CASE WHEN sex = 'Woman' THEN 1 ELSE NULL END) AS '女性',  
	COUNT(*) AS 'total'  
FROM test 
GROUP BY age10s WITH ROLLUP;
SQLServerでの結果。
SQLServerの結果

MySQL および Microsoft SQLServer のクエリでは「COUNT(*) AS ‘total’」で各行の合計を、ROLLUP を付加して各列の合計を算出しています。


■ PostgreSQL
SELECT 
	CAST(age10s AS char(8)) AS 年代, -- 年代の値を文字列に変換
	COUNT(CASE WHEN sex = 'Man' THEN 1 ELSE NULL END) AS 男性,  
	COUNT(CASE WHEN sex = 'Woman' THEN 1 ELSE NULL END) AS 女性,  
	COUNT(*) AS total 
FROM test02 
GROUP BY age10s 

UNION  -- 以下、合計行の集計を結合

SELECT 
	'total', 
	A.男性, 
	A.女性, 
	A.total 
FROM
(SELECT 
	COUNT(CASE WHEN sex = 'Man' THEN 1 ELSE NULL END) AS 男性,  
	COUNT(CASE WHEN sex = 'Woman' THEN 1 ELSE NULL END) AS 女性,  
	COUNT(*) AS total 
FROM test02
) A

ORDER BY 年代;
PostgreSQLの結果はこのようになりました。
PostgreSQLの結果

PostgreSQL には今のところ ROLLUP がないので、UNION 句以前(1~8行目)でクロス集計、UNION 句後(11~24行目)で全体数値を集計して最終行に結合しています。


■ Redshift
SELECT 
	CAST(age10s AS char(8)) AS age10s, -- 年代の値を文字列に変換
	COUNT(CASE WHEN sex = 'Man' THEN 1 ELSE NULL END) AS Man,  
	COUNT(CASE WHEN sex = 'Woman' THEN 1 ELSE NULL END) AS Woman,  
	COUNT(*) AS total 
FROM test 
GROUP BY age10s

UNION  -- 以下、合計行の集計を結合

SELECT 
	'total', 
	A.Man, 
	A.Woman, 
	A.total 
FROM
(SELECT 
	COUNT(CASE WHEN sex = 'Man' THEN 1 ELSE NULL END) AS Man,  
	COUNT(CASE WHEN sex = 'Woman' THEN 1 ELSE NULL END) AS Woman,  
	COUNT(*) AS total 
FROM test 
) A

ORDER BY age10s;
最近話題の Redshift は PostgreSQL をベースに開発されているため、PostgreSQL で使用したものとほぼ同じクエリで実行可能でした。
Redshiftの結果


また、Microsoft SQLServer と PostgreSQL には拡張機能として分析関数が用意されており、これらを使ってもクロス集計が可能です。

■ Microsoft SQLServer(pivot句使用)
SELECT 
	age10s AS 年代, 
	sum(Man) AS 男性, 
	sum(Woman) AS 女性 
FROM test 
PIVOT (COUNT(uid) for sex in (Man, Woman)) 
AS PIVOTTABLE 
GROUP BY age10s 
ORDER BY 1;

Microsoft SQLServer 2005 以降で「pivot句」を使ってのクロス集計が可能です。CASE 文を多用した前述のものよりもいくらかスッキリしました。結果は以下のとおり。
SQLServer PIVOT句での結果
続いて、PostgreSQL には crosstab 関数が用意されています。ただし、この関数は最初から使えるわけではなく、拡張機能を自分で追加する必要があります。

■ PostgreSQL(crosstab関数使用)
SELECT 
	age10s AS 年代, 
	coalesce(Man,0) AS 男性, 
	coalesce(Woman,0) AS 女性 
FROM 
	crosstab(
		'SELECT 
			age10s, 
			sex, 
			count(id) 
		FROM 
			test02 
		GROUP BY 
			age10s, 
			sex 
		ORDER BY 
			age10s, 
			sex'
) AS (  -- 出力するデータの型を指定
	age10s int, 
	Man bigint, 
	Woman bigint
);

出力するデータの型を指定するのが特徴的です。結果は以下のとおり。
PostgreSQL crosstab関数での結果

分析関数では合計値は算出されないため、crosstab 関数を使用していない PostgreSQL のクエリのように別で合計を算出して結合するなどの対応が必要になります。

なお、crosstab 関数では「性別が”Man”だったら ”男性”列にカウントする」という処理ではなく、年代でグループ化した際に性別列のデータをまとめてソート順でそれぞれカウントしてクロス表に振り分けるという処理が行われているようです。そのため、『20代男性』のデータを抜いた状態で処理を行うと以下の様な結果が得られます。

PostgreSQL crosstab関数 その2

『20代男性』のデータを抜いたので、本来であれば20代は【男性:0 女性:5】になるはずですが、20代は”女性”データしかないため、集計結果が表に対して左詰めされてしまっています。このように、 crosstab 関数の使用には少し注意と工夫が必要です。


ここでご紹介したものは簡単な例ですが、複雑な抽出条件からのクロス集計もこれらをベースに組んでいくことで非常に速く結果を得ることができるようになると思います。ぜひお試しください。

カテゴリー: データ加工 | SQLでクロス集計 はコメントを受け付けていません。

データ分析ツール第2回:テキストエディタ後編(データの編集)

こんにちは、データ分析部の村上です。

前回はテキストエディタを用いた「データの確認方法」を紹介しました。今回はテキストエディタを用いた「データの編集」について紹介します。データの編集には以下の様な使用目的があり、テキストエディタを使用して処理します。

  1. データの置換
  2. データの抽出
  3. データのマージ
  4. 文字コードの変換

それぞれ具体的に説明していきたいと思います。

1.データの置換

テキストエディタのほとんどは、前回紹介した「検索」の延長である「置換」の機能を備えています。「置換」は「検索条件に合致した文字列を指定した文字列と置き換える」という処理を行います。データ分析における様々なステップ(例:「文書の作成」、「データのクリーニング」、「分析用コードの作成」)のなかで使用頻度がとても高い機能です。データの置換には、以下の様なものがあります。

  • 更新前の項目を更新後の項目と入れ替える
    「第1回」を「第2回」に変換する、「2013/07/22」という日付を「2013/07/23」という日付に変換する。


  • データを指定のフォーマットに変換する
    カンマをタブに変換する、年月日の区切りを「-」から「/」に変更する。


  • 表記揺れを統一する
    「get_data」を「getData」に変換する


  • 特定の文字列を削除する
    ダブルクォーテーションを削除する、全角文字を削除する


以下では下図のようなCSVファイルに含まれるカンマを全てタブに変換する例を示します。




「Ctrl + h」で置換ウィンドウを開きます。/


検索する文字列に「,」置換後の文字列に「\t」を指定します。

「\t」というのはタブ文字を表すエスケープシーケンス (※)です。「すべて置換」をクリックすることで、以下のようにカンマがタブ文字 (青い右向きの矢印で表示)に変換されます。

※エスケープシーケンス…改行やタブ文字のような、テキストとして入力を行なえない特殊な文字を「\」記号と他の文字を組み合わせて代用するための文字列。「\n(改行)」、「\t(タブ文字)」、「\\(\)」等がよく使われます。









2.データの抽出


テキストエディタを用いて簡単なデータ抽出をする事も可能です。特に、ある特定の区間の行を抽出したいといった時にはテキストエディタを用います。以下では、日付順に並び替えられたデータから7月以降の部分だけ抽出する例を示します。


今回使用するデータは、2013/6/15~2013/7/15の期間のデータで、日付の昇順に並び替えられているという事が分かっています。7月以降のデータを抽出したいので、「7/1」というキーワードで検索を行います。


検索を行うことで、2013/6/30と2013/7/1の境目がどこにあるのか調べることができます。必要なデータがある直前の行(ここでは537,601行)の行末にカーソルを持っていき、「Ctrl + Shift + Home」ボタンでデータを全て選択します。この操作によって7/1より前のデータ全てが選択され、その結果が下図になります。



選択されたデータを削除すると、下図のような7月以降のデータのみを抽出することができます。

このように、非常に手軽にデータの抽出を行なうことができます。もちろん、他のツールを用いてデータの抽出をすることもできますが、テキストエディタを用いたほうが良いことも多々あります。テキストエディタを利用する理由としては、Excel、Access、SQLといったツールを使用する際に以下の様なデメリットが考えられるからです。

  • Excel
    1,048,576行以上(Excel2007以降)のデータを扱うことができない、そのままデータを開くと「001」というデータが「1」に変換されるなどの問題があります。



  • Access
    2GB以上のデータを取り扱うことができません。また、データ形式を指定してインポート、クエリの作成、エクスポートというステップを踏む必要があるので、テキストエディタと比較すると多くの手順が必要になります。



  • SQL
    元データが入ったデータベースにアクセスできる場合は手軽に高速にデータの抽出ができますが、データベースにアクセス出来ない場合はデータベースの作成、インポート、クエリの作成等のステップを踏まなければなりません。



  • 3.データのマージ


    テキストエディタをデータのマージに利用することもできます。例えば、先ほどのデータの抽出と組み合わせて、抽出したデータと、別のデータをマージしたいといった場合に力を発揮します。ファイル数が多い場合のマージに関してはあまり向いておらず、そのような処理に関してはこちらのエントリーを参照して頂ければと思います。以下では、先ほど抽出した「2013/7/1~2013/7/15」の期間のデータを「2013/7/16~2013/7/31」の期間のデータとマージして、7月分のデータを作成するという例を示します。


    先ほど抽出したデータの開始行にカーソルを持って行き「Ctrl + Shift + End」でデータを全て選択して、「Ctrl + c」でデータをコピーします。


    コピーしたデータを2013/7/16~2013/7/31のデータが入っているデータの2行目に「Ctrl + v」で貼り付けます。以下の様に、データをマージすることができます。


    4.文字コードの変換

    Linuxで作成したデータをWindowsで使用したい、またはその逆の場合に、標準の文字コードが違うことが原因でエラーになることがよくあります。WindowsではShift-JISを標準の文字コードとしており、Linux系のOSではUTF-8を標準としたものが多く、正しく動作をさせるためには文字コードを変換しなくてはなりません。


    以下の図は、UTF-8(上)とShift-JIS(下)で作成されたテキストファイルです。テキストエディタで開くことにより、現在開かれているテキストファイルの文字コードを確認することができます。


    文字コードが UTF-8 のテキストファイルの、文字コードを Shift-JIS に変更する手順を以下に示します。


    テキストファイルを開きます。現段階では、文字コードは UTF-8 となっています。


    「名前を付けて保存」でデータを保存し、その際に文字コードを「日本語(シフトJIS)(932,shift_jis)」に設定します。


    保存した結果として、文字コードが Shift-JIS に変更されている事が確認できます。


    以上のように、テキストエディタを用いて様々なデータ編集を行なうことができます。データを編集する際にテキストエディタを用いるかどうかは、以下の様な判断基準を用いると良いでしょう。

    • データの規模はどの程度か?
      テキストエディタは、データをメモリ上で取り扱うので、メモリに収まらない大規模なデータには適しません。


    • 処理が複雑ではないか?
      テキストエディタでは、処理を繰り返し行なう、条件を指定するといった複雑な処理を行なうことはできないので、テキストエディタは適しません。(例:曜日ごとの売上合計を集計する、カテゴリ毎の商品数を集計するなど。)


    • 使用するテキストエディタで目的の編集は可能か?
      今回紹介した機能以外に、並べ替え、短形選択(テキストを列×行で選択できる機能)、キーマクロ(キーボードの操作を記録して同じ入力を繰り返し行なう機能)等の様々な機能がテキストエディタには備わっています。使用するテキストエディタによって利用可能な機能が異なるので、注意が必要です。


    • この3つの条件を考慮した上で、テキストエディタが適していないと判断した場合は、Excel、Access、SQLといった他のツールを使う、システム化を行なうといった対応が必要になります。また、データ量が多くて処理しきれない場合は、Hadoopの様な分散処理システムを用いることも必要でしょう。データと用途に合わせて適切なツールを選択できるよう、今後も様々なツールを紹介していきます。

カテゴリー: 未分類 | データ分析ツール第2回:テキストエディタ後編(データの編集) はコメントを受け付けていません。

データ分析ツール第1回:テキストエディタ前編

こんにちは、データ分析部の村上です。

データ分析では小規模/大規模、構造化/非構造化など、さまざまなサイズや形式のデータを扱い、それらに対してデータのクリーニング・集計・分析・モデルの作成までのさまざまな処理を行いますが、扱うデータによってツールを使い分ける必要があります。そこで、データ分析で使用するツールの用途や使用する機能、ツールの特徴をひとつひとつ紹介して行こうと思います。

それでは、今回は「テキストエディタ」についてです。

まず、テキストエディタですが、Wikipediaでは以下のように定義されています。

“テキストエディタ(英語: text editor)とはコンピュータで文字情報(テキスト)のみのファイル、すなわちテキストファイルを作成、編集、保存するためのソフトウェア(プログラム)である。一般的に、文字情報の入力、削除、コピー、貼り付け、検索、置換、整形などの機能を備えている。Microsoft Windowsのメモ帳や、Mac OS Xのテキストエディット、UNIXのvi、Emacsなど、多くのOSやデスクトップ環境に最初から装備されている。”(Wikipediaより引用)

テキストエディタの特徴としては以下のような点が挙げられます。

・簡単で手軽な操作
・速度が速い
・メモリを大量に消費する
・巨大なデータには不向き
・複雑な処理はできない

テキストエディタはテキストベースのデータであればすぐに開いて確認・編集できます。また、コピー、貼り付け、検索や置換といった操作も非常に簡単な手順でできます。テキストエディタでは基本的に開いたファイルを全てメモリ上で扱うので、処理速度が速くなり、メモリを大量に消費します。そのため、メモリに入りきらないような巨大データを取り扱うのは得意ではありません。テキストエディタでは上記のような簡単な処理しかできないため、複雑な処理を行う場合は他のツールを使用します。



データ分析ではテキストエディタを主に以下の2つの用途で使用します。

・データの確認
・データの編集
データの確認
データ分析を行う際には、ログデータ等のテキストファイルを取り扱う事がよくあります。データを頂いてから最初に行うのがデータの確認なのですが、テキストエディタを使用します。データ確認をする際にテキストエディタで使用する機能は以下のようなものが挙げられます。

・テキストファイルのオープン
・検索
・ジャンプ
・文字の識別

それでは、それぞれ具体的に説明していきたいと思います。

テキストファイルのオープン
テキストエディタでは、テキストベースのファイルであればどのようなファイルでも人間が理解できる形でオープンすることができます。テキストベースのファイルとは文字情報だけで構成されているファイルで、拡張子がtxt(テキストファイル)、csv(カンマ区切りデータ)、tsv(タブ区切りデータ)、c(Cのソースコード)、bat(バッチファイル)などのことを言います。バイナリファイルは開いても人間が理解できない文字の羅列になってしまいます。バイナリファイルとは以下の様なものを言います。

“専用のアプリケーションソフトで扱うことを前提として、文字コードの範囲などを考慮せずに作成されたファイルのこと。画像や動画、音声を記録したファイルや、実行可能形式のプログラムを収めたファイルなど、文字のみで構成されるテキストファイル以外はすべてこれに含まれる。テキストファイルで使用できない制御コードなどを含むため、テキストエディタでまともに読むことはできない。ワープロソフトなどで作成された文書ファイルは、それぞれに固有の書式設定などを埋め込んでいるため、他社製のソフトウェアやテキストエディタでは読み書きできないバイナリファイルとなる。”(IT用語辞典e-wordsより引用)


多くのテキストエディタでは、様々な文字コードに対応し、拡張子に合わせて見やすいよう調整してくれる機能を持っています。以下にその一例を示します。



上の画像はcsvファイルを表示した時の例です。列の先頭が揃えられて見やすくなっています。



上の画像はCのソースコードを表示した例です。変数宣言や文字列の色が変わって見やすくなっています。

検索
検索はファイル内に商品IDやユーザーID等の特定文字列が含まれているかを確認したい場合や、見たい文字列がある位置に移動するために使用します。例えば、商品IDに関連した商品名や値段を確認したい、特定の日付のデータを見てみたい、エラーの原因となった文字列が他にも存在するか確認したい、という状況で検索を行います。

検索をする際に正規表現を用いる事で様々な条件を指定する事ができます。正規表現とは、文字列の集合を一つの文字列で表現する方法です。いくつかの例を以下に挙げます。




このように、抽象的な表現で様々な文字列を検索することができます。

また、データに対して、特定の文字が何回出現したかを数えて簡単な集計を行うこともできます。




上記の画像では”abcdef”という文字列がテキストファイルに何件含まれているか数えています。

ジャンプ
エラー時のデータ確認に重宝するのがこのジャンプ機能です。集計や分析を行う際にデータが問題でエラーが起こった場合は、ほとんどの場合でエラーメッセージにその行数が記載されます。例えば、PostgreSQLでのインポートの失敗時には以下のようなエラーが出ることがあります。

ERROR: missing data for column “pdate”
CONTEXT: COPY sample, line 932: “”


このエラーは、932行目をコピーするときにデータがみつからないというエラーです。そこで、インポート元のデータを見てみます。




エラーがあったのは932行目なので、932行目を指定してOKをクリックします。



932行目に改行が入っていて、それがエラーの原因になっている事が分かります。

今回のように数百行程度なら画面をスクロールすればデータのところまでたどり着くことができるのですが、数百万行もデータがある場合にスクロールで目的の行を見るのは大変です。そういったときに、このジャンプ機能を使用します。

文字の識別
コンピュータは記載したものしか理解できないので、英数字、ひらがな、カタカナ、漢字、記号と言った文字以外にも、空白や改行といった人間の目には見えないようなものも文字として取り扱います。人間の目では差がないように見える半角スペースや全角スペース等もコンピュータは違う文字として取り扱うため、これが原因でエラーを引き起こすことが度々あります。テキストエディタでデータを確認する際に非常に役に立つ機能が、このような人間の目では判別できない半角スペースと全角スペース、タブ、文字コードの違う改行文字等の文字を目で識別できるようにする機能です。この機能によって区切り文字を判断したり、エラーの原因を特定しやすくしたりできます。

上記のテキストファイルは半角スペース、全角スペース、タブ、改行文字が入力されています。表示する設定にすると以下のように表示されます。


これでこのテキストファイルが半角スペース5文字、全角スペース5文字、タブ文字5文字、改行文字(LF)5文字、EOF(ファイルの終わり)という構成である事が分かりました。半角スペースが全角スペースになっているというのは見つけづらいエラーの一つなので、こうして見やすくしておくことでエラーを起こりにくくし、原因を突き止める事を容易にします。

次回はテキストエディタでのデータ編集について書きたいと思います。

カテゴリー: 未分類 | データ分析ツール第1回:テキストエディタ前編 はコメントを受け付けていません。

データの可視化について

みなさん、こんにちは。データ分析部の伊藤です。

色々なデータを集計したり、分析したりすると、その結果を報告しなければならない場面は多々あります。集計結果や分析結果などはあくまで数値の羅列であり、その数値を見たとしても直感的に理解できる人はよいでしょうが、多くの人はなかなか理解ができません。

そこで、分析結果をグラフなどを用いて可視化することが重要です。データを可視化することで、人間の理解を手助けすることができます。

しかし、一口にグラフと言っても、様々な種類のグラフがあり、適切な分析結果に対して適切なグラフを用いなければ、逆に誤った理解へとミスリーディングしてしまうことも多々あります。私も日々、そのような適切な結果の可視化といった問題には頭を悩ませています。

今日は、データの可視化について、いくつか事例を挙げながら紹介していきます。

■主なグラフと用途
今日は棒グラフから帯グラフを紹介します。残りの4種類は次回に行います。

・棒グラフ

ある店のメニューで松、竹、梅のメニューがそれぞれ、3,000円、1,730円、1,000円だったとします。この場合、暗算でもできてしまいますが、棒グラフで可視化すると、各メニューの料金差が視覚的に理解することができます。

このように各カテゴリの量の大小を比較するには棒グラフを用います。


・円グラフ

今度は、とあるクラブ会員の属性を考えることとします。そのクラブの会員には10代が70人、20代が80人、30代が100人、40代が200人、50代が300人いたとします。この場合、各年代がどのような構成比になっているかを示すには円グラフが適切です。
・帯グラフ

先ほどのクラブ会員で、2013年になると構成年代が大きく変化し、10代が120人、20代が140人、30代が160人となり、40、50代に変化がなかった場合、どのように構成比が変化したかを把握するためには、帯グラフを用いるのが適切です。


今回は普段何気なく使っているグラフに関してご紹介しました。すごく簡単なことですが、意外とデータの特性とグラフの特性を見誤ってしまうケースは少なくありません。このように、データをどのように見せるかについて、今一度再考してみるのもよいでしょう。
次回は折れ線グラフから散布図までの紹介を行います。

カテゴリー: 分析現場 | データの可視化について はコメントを受け付けていません。

既存顧客とライフタイム・バリュー

みなさん、こんにちは。データ分析部の伊藤です。

前々回の購買ファネル、前回のブランドスイッチで、企業のマーケティング活動における非常に重要な内容を紹介してきました。今回ご紹介するのはLTV(ライフタイム・バリュー)と呼ばれる指標です。

LTVとは、一人の顧客が生涯を通じて特定の商品やサービスにおいて利用する金額の合計のことです。近年のCRMでも、非常に重要な指標として扱われています。しかし、実際にKPIとしてLTVを活用している企業はあまり多くないというのが正直な感想としてあります。

※KPIとはkey performance indicatorの略語で、企業目標やビジネス戦略を実現するために設定した具体的な業務プロセスをモニタリングするために設定される指標です。

LTVの算出式は下記の通りです。

実際に具体例を考えてみましょう。

あるメーカーでの取引先の情報として、AとBという取引先があったとします。

取引の内訳状況が下記のような状況だとすると、いずれの取引先のLTVが高いのでしょうか。

一見すると、Aは1年目に500万円もの取引があり、良好な顧客であるように思えます。

Bは飛びぬけた取引はないものの、毎年100万円の取引があり、安定しています。

仮に収益率が30%だったとした場合、先ほどの算出式よりLTVを計算してみましょう。

Aの平均取引金額は176万円です。一方Bの平均取引金額は100万円です。収益率は互いに30%と仮定していますので、0.3となります。そして、継続年数はAが5年、Bが10年です。

したがって、AのLTVは176(万円)×0.3×5(年)となり、264万円となります。一方、BのLTVは100(万円)×0.3×10(年)となり、300万円となります。

平均取引金額ベースでみると、Aの方が優良顧客であると捉えがちですが、継続年数を考慮したLTVベースだとBの方が、価値が高い結果となるのです。

顧客の取引金額をいかにして引き上げるかという施策は多くの企業ですでに行われていると思います。しかし、継続的に顧客と取引を続けていくという視点を重視することにより、施策に対する考え方や指標も異なってくるでしょう。

購買ファネルを再考した際にも指摘しましたが、いかにして顧客を集めてくるかという視点の先に、集めてきた顧客をファンに育てていくという視点がいかに大事であるかをこのLTVという指標は教えてくれるのです。

ぜひ皆様も一度LTVを考えてみてはいかがでしょうか。

マーケティング系の記事はいったん終了し、次回からは分析ネタをお送りします。

カテゴリー: 分析手法 | 既存顧客とライフタイム・バリュー はコメントを受け付けていません。

職能テスト

ALBERTでは半期に1度、職能テストが実施されます。テストはペーパーテストと実技テストがあり、実施回によって違いはありますが、TOTAL1時間半ほどでテストに回答します。結果は職能給の評価の一部となります。

職能テストは、社長の上村・会長の山川が問題を作成しています。出題範囲は事前に告知がありますが、直前の半期の社員必須参加の勉強会の内容、研修合宿での学習内容(既存事業の詳細や今後の事業計画、企業理念や経営理念などを学びます)、「コーポレートサイト」全体が範囲であるため、勉強しなければならない範囲は年々広くなっています。特に、今年4月のリニューアルでデータ分析に関するコンテンツが増えたため、多くの社員が「今回のテスト範囲の勉強は大変だった」と語っていました。

ペーパーテストは上村パート/山川パートに分かれており、上村パートは事業について、山川パートは理念や理論についての出題というケースが多いです。


では、直近(2012年7月実施)の実際の出題内容から印象的なものを少しご紹介したいと思います。




——————————————————————————————–
■ DSPについて説明してください

■ SmarticA! 導入企業名を3つ挙げてください

■ 「コンジョイント分析」について、知っていることを書いてください。

■ 相関係数の絶対値は、最大(   )、最小(   )

——————————————————————————————–

これらの他にも、会社の基本情報や具体的な数字を答える設問など、かなりのボリュームがあります。

個人的には、今回「コンジョイント分析について知っていることを書いてください」をいかに答えるか、非常に苦慮ました。自由記述の設問の場合は「最も良く書けている人」を配点の満点とし、そこから評価する要素を決めて他の人を採点するという採点方式が取られているからです。(といっても、この設問の配点が高かったわけではありませんが・・・)

私自身は、コーポレートサイトの記述にある

——————————————————————————————–
コンジョイント分析とは、個別の要素を評価するのではなく、商品全体の評価(全体効用値)することで、個々の要素の購買に影響する度合い(部分効用値)を算出する手法
——————————————————————————————–

という説明に倣った記述に加え、世間では具体的にどのようなシーンで使われいるか、ALBERTのサービスにはどこに活かされているかと言ったことも加えて回答しました(配点中満点でした)。



弊社の小宮もtwitter に



と、投稿していましたが、職能テストは経営メンバーからのメッセージです。テスト範囲が、つまりメッセージであり、会社の向かおうとしている方向、「ここだけは外さないように」というエッセンスが詰まっています。

テストは半期に一度ですが、分析の手法や統計的な理解をしようとする姿勢はALBERTの社員にとって必須であると私は考えます。特に、データ分析部のメンバーは常に統計的、科学的な視点を持ちロジカルに語る、ということを日々意識しなければと思っています。そうすることで、実務上のデータのおかしな点に気付くことができるように思います。

先日はテスト成績上位者への「ご褒美ランチ」も実施されました。



給与への反映だけでなく、こういうご褒美も嬉しいですね♪




【余談】
ちなみに、ALBERTのメンバーで飲みに行くと「それはサンプルが少なすぎるなあ」とか「異常値だよ!」という言葉が終始飛び交っています。というか、好んで皆で使っています(笑) 少々冗談のように聞こえるかもしれませんが、日常生活で統計を意識した会話をするには非常に良い手法だと思います。たとえば
「飲み会のメンバーが直交しているか」
「理想の異性のタイプに出会える確率を考える」など。


分析者界隈で交流のある方からリクエストいただきましたが、ようやく書くことが出来ました。遅くなりまして申し訳ありません。

カテゴリー: 日常 | 職能テスト はコメントを受け付けていません。

購入に関する要素について ~ブランドスイッチ~

みなさんこんにちは。データ分析部の伊藤です。

前回の記事では購買ファネルについて再考しました。今回は、その中での「購入フェーズ」に関して、詳しく見ていきたいと思います。
広告などの施策で集めてきた消費者がその商品を選ぶ基準はどのようなものでしょうか。
マーケティングには、ある商品カテゴリーの中で、消費者がそれまで購買してきたブランドとは異なる競合ブランドを購買し始める、ブランドスイッチという考え方があります。今回は、そのブランドスイッチに至る5つの要素をご紹介します。

1、 不満
現状に対して気に入らないことや納得のいかないことに対して生じる感情です。今使っている製品に対して、もう少しこうあってほしい、こういう機能(サービス)があれば…などの不満は多かれ少なかれあるのではないでしょうか。ただし、このような不満があるからといってすぐにブランドスイッチが起こるわけではありません。

2、 期待
「今の状況が変わったらあんなことがあるだろうな」というような現状の状況が改善されるだろうという望みを持つことです。それを手にすることでのプラスのイメージであり、新しいものに代替することでより使いやすい、進化した機能がついているのではないかという期待を持ちます。ただし、期待感だけでもなかなかブランドスイッチは起こりません。

3、 未練
「今の環境にはあるのに、変化後の環境にはない」というように失ってしまうものがある場合に見られる、あきらめきれないという感情です。過去に使っていた製品への愛着などがあげられるでしょう。

4、 不安
期待とは逆に、「今の状況が変わってしまったらこうなってしまうのではないか」「思ったものとは違うのではないか」というような心配事やマイナスのイメージです。新しい製品について情報が少ないために知らないことが多く、手探りの状態になってしまう時などに生じます。商品レビューや知人の意見などもこれに該当します。

5、 ハードル
現段階から変化するにあたって存在する障害です。低ければ簡単に越えられますが、高いとなかなか越えることができません。

まず初めに、【ハードル】を除いた4つの要素について考えてみましょう。

多くの場合、現状に【不満】を持つことで変化に【期待】をするようになります。
しかしそこには現状に対する【未練】もあり、同時に変化することに【不安】も
感じ始めます。つまり、現状への【未練】や将来への【不安】があると、
変化をさせまいと、変化を抑えるように働くわけです。

それとは逆に、現状への【不満】が大きく、将来への【期待】が大きければ、
変化の感情は後押しされ、変化を押し進める形になります。

ここで重要なのはこれら4つの要素を「ベクトルで考える」ということです。


これら4つの【不満】、【期待】、【未練】、【不安】は変化を求めている人にとって多かれ少なかれ持っている感情だと言えるでしょう。4つのベクトルのうち【未練】と【不安】が変化に対してマイナスの方向、【不満】と【期待】がプラスの方向のベクトルを持っていて、これらを足し合わせた結果、どちらの向きに向いているのか、ということが重要になってくるのです。ベクトルには人それぞれの重み付けがあるとは思いますが、ベクトルの合計(合成ベクトル)が変化に対してプラス方向であれば、ブランドスイッチをする可能性が高くなります。
では残るひとつの要素【ハードル】はどのようなものでしょうか。

例えば、条件もよく、購入したいと考えていても、会員登録が大変だったり、購入に至るまでのプロセスが煩雑だったりすると、感情のベクトルがプラスに向いていても購入に至らない人が続出してしまうといったことが起こりえます。つまり、完全にベクトルがプラスの方向に向いていても、【ハードル】が存在するとブランドスイッチが起こりにくくなるということです。

他社から自社へブランドスイッチしてもらうにはどうしたらよいか、自社から他社へブランドスイッチさせないためにはどうしたらよいか、一度考えてみてはいかがでしょうか。

次回はLTV(ライフタイムバリュー)に関してご紹介いたします。

今日はここまで。

カテゴリー: 分析現場 | 購入に関する要素について ~ブランドスイッチ~ はコメントを受け付けていません。

機械学習について ~その1~

こんにちは、データ分析部アルバイトの杉山です。

今回は私が大学で研究している、「機械学習」についてご紹介したいと思います。予備知識の無い方でも理解できるようにご紹介しますので、一部正確でない点や、曖昧な表現が存在するかもしれませんが、何卒ご容赦ください。

機械学習とは、その名の通りコンピュータを使って人間が普段行っている学習機能を実現しよう、というものです。現在では検索エンジンや音声認識、文字認識等、様々な分野で応用されています。

例えば、医療分野において、CTスキャンの画像を機械学習にかけて、病気を発見しようという試みがあります。病気のあるCTスキャンの画像には、腫瘍などの特定のパターンがあり、医師はそれを経験や知識を以って見抜き、発見する訳ですが、機械学習では画像のパターン認識などを用いて異常を発見します。この試みが実現すれば、医師の負担を減らし、また病気の発見漏れを減らすことが見込めます。

このように、機械学習はサンプルとなるデータを解析して、特定のパターン(上記の例で言えば腫瘍など)を発見することができますので、データマイニングの手段としてもよく用いられています。

機械学習によるパターン認識について、もう少し簡単な例を交えながらご説明したいと思います。

「重さ」と「艶」という二つのパラメータを持ったリンゴを、機械学習を用いて「良いリンゴ」と「悪いリンゴ」に区別したいとします。パターン認識にも様々な手法がありますが、今回は「教師あり学習」という、事前に与えられたデータ、「教師データ」を元にして機械に学習をさせ、未知のデータを区別する方法を用います。リンゴの例で言えば、プロの人間が見分けた幾つかのリンゴを「教師データ」とし、それを元にして機械がリンゴを見分けていく、ということになります。

下図にリンゴの分布を例として示してみました。○は人間が判定した「良いリンゴ」、×は悪いリンゴ、△は未知のリンゴです。このようなデータが与えられたときに、機械学習を使って△、「未知のリンゴ」を良いリンゴか悪いリンゴか判定することができます。


教師有り学習の中にも様々な手法がありますが、このような単純なデータの分布であれば大抵は以下のように識別されます。


○と×の教師データを元にして識別平面(図中の直線)が引かれ、直線より右側の△は全て良いリンゴ、左側は全て悪いリンゴと判定されます。

今回はごく簡単な例でパターン認識の解説を行いましたが、世の中の事象はこのように単純に識別できるものばかりではありません。次回はもう少し複雑な問題や、機械学習の手法について紹介したいと思います。

カテゴリー: 分析手法 | 機械学習について ~その1~ はコメントを受け付けていません。