Upload
vuhanh
View
264
Download
0
Embed Size (px)
Citation preview
Copyright © LIXIL Group Corporation. All rights reserved.
LIXILのデータ活用術
(株)LIXIL 情報システム本部
菖蒲真希/船水孝宥志
CONTENTS
2
1 LIXILについて
2 自己紹介
3 情報分析基盤導入経緯
4 LIXIL Hadoopアーキテクチャ
5 Sparkを使用したデータプレパレーション(顧客情報一元化PJ)
6 まとめ
Copyright © LIXIL Group Corporation. All rights reserved.
1. LIXILについて
4
㈱LIXILの設立の概要
純粋持株会社の下で、『株式会社LIXIL』を核とした
グループ一体経営体制に2011年4月を以って移行。
株式会社 LIXIL
トステム㈱、㈱INAX、新日軽㈱、サンウエーブ工業㈱東洋エクステリア㈱の5社が、2011年4月1日に合併。
・・・
5社が統合
㈱LIXILグループ
5
㈱LIXILグループについて
LIVING × LIFE住 生活
◆売上高 1兆7,864億円 (2017年3月期)◆事業利益 883億円 (2017年3月期)
6
㈱LIXILグループについて~東証一部上場~
LIVING × LIFE住 生活
株式会社 LIXIL《5社統合》
◆売上高 1兆7,864億円 (2017年3月期)◆事業利益 883億円 (2017年3月期)
7
LIXILの商品群①
バスルーム住宅用サッシ・シャッター 屋根・太陽光発電機器衛生陶器
住宅用建材事業
ビル建材事業
六本木ヒルズ
さいたまスーパーアリーナ フジテレビ本社 テレコムセンター
Kitchen unit
カーテン/クロス/絨毯
タイル・外壁材エクステリア建材
(オーニング・ウッドデッキ)
インテリア建材
エクステリア建材(カーポート)
玄関ドア・引戸
洗面化粧台
8
LIXILの商品群②
公共エクステリア事業
スカイパス
駐輪場
大型引戸防護柵 サポートレール
ベンチ
マクドナルド ケーズデンキセブンイレブンLAWSON
店舗用建材事業
スーパーウォール
スーパーストロング構造体
高性能住宅工法事業
バス停
9
イノベーションとテクノロジーで世界の住生活産業を牽引
LIXIL Water Technology
LIXIL Building Technology
LIXIL Housing Technology
LIXIL Kitchen Technology
衛生陶器 国内 No.2
ユニットバス 国内 No.1
水栓金具 グローバル No.1
衛生陶器 北米 No.1
カーテンウォール グローバル No.1キッチン 国内 No.1
窓サッシ 国内 No.1
エクステリア 国内 No.1
玄関ドア 国内 No.1
Copyright © LIXIL Group Corporation. All rights reserved.
2. 自己紹介
11
2. 自己紹介
所属:(株)LIXIL 情報システム本部Information Excellence部 データ解析G
名前:船水 孝宥志(ふなみず こうし)
業務内容:Hadoop設計・構築等のインフラ面からHive,Sparkの開発までHadoopに関わることすべてを担当。最近はAWSやGCPも勉強中。
趣味:投資(機械学習を用いて自分でアルゴリズムを考え運用するも見事に惨敗)
Copyright © LIXIL Group Corporation. All rights reserved.
3. 情報分析基盤導入経緯
13
情報分析基盤導入の経緯
■ システム統合中・・・・ 現状は、重要な情報が各システム内に散在
■ 全社視点で分析を正確に実現できていない・ 担当者の観点でのレポート作成 データの出元、集計式が不明瞭・ 属人的な処理、シャドーIT化 Excelマクロ、Access ・・・
■ 同じような分析を複数の部門で実施
「One True Number」 の実現
【課題】
ERP業務
システム業務
システム外部データ
情報分析基盤
KPIレポート
定型レポート
分析レポート
「情報分析基盤」の構築各業務システムよりデータを抽出し、各種KPIを含む提携レポートを提供するとともに高度なデータ解析を可能とする基盤
14
情報分析基盤を利用した システム構築に着手
■ グローバル・マネジメント・レポートグローバルで分散する業績データを戦略に沿った連結ベースの業績評価基準に自動集約しレポーティングする
■ 顧客情報の一元化旧個社からの各システムに分散してる顧客情報を 名寄せし一元化、顧客動向分析やマーケティング活動分析に活用
■ 営業活動分析営業マンが作成する営業活動レポートを自動化し集約、営業マンの特性分析等に活用
…
4. LIXIL 情報分析基盤 アーキテクチャ
16
LIXIL情報分析基盤 アーキテクチャ
Hadoop & SAP® HANA Hybrid System
Hadoop SAP HANA
スケーラブルストレージ 分散処理 構造化&非構造化データ コスト効率の高いデータレイク バッチ処理が得意
インメモリデータベース インメモリ処理 構造化データ、SAP ERPとの相性 ◎ 高価だが応答速度の速いDB リアルタイム処理が得意
それぞれの長所を活かして短所を補うアーキテクチャ
17
業務システム
LIXIL情報分析基盤 アーキテクチャ
2つのシステム組み合わせ、双方の利点を活かすことで、大容量データを効率的かつ安価に処理できる基盤を構築する。- Hadoop: 統計分析・機械学習などの高度な分析を、拡張性が高く、低コストに実現- SAP HANA®:超高速処理で業績管理を実現
販売実績など
SNSアクセスログ
など
社外システム
製造ラインセンサーなど
IoT
SAP® HANA
業績サマリーデータ
HadoopETLツール
HANAVORA
情報分析基盤
データ連携 業績管理
データストレージ
ソースシステム
見える化
分析
業績詳細データ
分析データ
KPIレポート
ダッシュボード
ETLツール
ETLツール
基礎分析
統計分析
機械学習
18
LIXIL情報分析基盤 Hadoop構成
Master1
• Zookeeper 1• JournalNode 1• NameNode (active)• HiveServer2• MySQL (slave)
Slave1
• DataNode• NodeManager
Slave2
• DataNode• NodeManager
Slave xxx
• DataNode• NodeManager
…
Master2
• Zookeeper 2• JournalNode 2• NameNode (standby)• ResourceManager
(active)• Ambari DB (slave)
Master3
• Zookeeper 3• JournalNode 3• ResourceManage
r (standby)• Ranger• MySQL (master)
Ambari
• Ambari Server• Ambari Metrics
Collector
• Ambari DB (master)
Edge
• HDFS / YARN / Hive / Spark client
• HDP ver 2.6.x
• Ambari x 1、マスタ x 3、スレーブ x 5~15台、クライアント x 1
• マスタは高可用性(HA)構成
• メタデータDBはマスタに同居
19
LIXIL情報分析基盤 Hadoop認証方式
HiveServer
ODBC/JDBC (Hive/SparkSQL)
Ranger
LDAP/
Kerberos
HDFS/YARN
Kerberos
HDFSアクセス
YARNジョブ(MR, Spark, Tez等)
Kerberos
Edge node
Ambari View
LDAPプロトコルでユーザ同期
認証
権限管理
データサイエンティスト
部門ユーザ
AD
Active Directory認証を採用
Hadoop管理者
20
LIXIL情報分析基盤 HDPを選んだ理由
➢Hortonwork社の高水準なサポートレベル
➢多くのパートナーを有しており、サポートされているエンタープライズ系製品が豊富
➢100% オープンソースのマルチテナントデータプラットフォームで、あらゆるアプリケーションやデータセット、
環境に対応可
➢新技術、新バージョンへの対応が速く、常に最新の技術をとりこめる
➢AmbariでのHadoop運用が容易
(ノード追加、削除、HDPアップグレード、各種サービスの設定等が容易にできる)
➢ Hortonworks Community Conectionが非常に有益
Hadoop/Spark の活用例-顧客情報一元化プロジェクト-
22
LIXILの顧客コミュニケーションの現状
LIXIL公式Facebook
公式HP
不特定 特定
コミュニケーション
販売
相談C
SR 修理受付C
システム単体では分析しているが、キーで紐付できないシステムの横断的なデータ活用ができていない
顧客情報一元化 PJ 背景
顧客接点システム/サービスの情報を共有した基盤を構築し、
システムを横断したデータ活用を実現する
23
顧客情報一元化 PJ 現状把握
顧客の情報のプロト版による名寄せ
① 3,200万件の履歴情報が存在
② 1,274万件の顧客情報
③ 1,232万件は住所・電話番号が判明
⇒ DM 送付の余地
④ 123万件はメールアドレスを保持
⑤ 101万件はパーミッションがある⇒メール送付可能
分析やメールマーケティングに十分
利用可能であることが判明した
ソース名 レコード数
所有者商品登録情報 …
ケアサービス会員情報 …
ECサイト①会員情報 …
ECサイト①購入履歴 …
ECサイト②会員情報 …
ECサイト②購入履歴 …
ECサイト③会員情報 …
ECサイト③購入履歴 …
苦情情報 …
問い合わせ履歴 …
ショールーム来館情報 …
商品カタログ請求履歴 …
修理受付履歴 …
シャワートイレ10年目点検 …
合計 32,022,534
全国で名寄せを実施1,274万世帯
住所のみ34万世帯
住所・TEL
1,232万世帯
メールアドレスを保持123万世帯
不可・未確認22万世帯
DM送信可※101万世帯
※全体の3%が住所・TEL・mailすべてを持っていてDMを許可している
24
<お客様サービスメニュー>• 問合せ• カタログ請求• ショールーム予約• 所有者登録• EC発注&状況確認• 修理依頼&状況確認• リフォーム相談
:
顧客情報一元化PJ ユースケースイメージ
顧客接点
顧客
活用部門
コンタクトセンター業務センター
メンテナンス
ショールーム
コミュニケーションポータル
営業
顧客情報
顧客情報一元管理
Login(社外認証)
利便性向上●1回の会員登録で他の
サービスも利用できる●発注・修理の進捗が電話
しなくてもわかる
窓口サービス向上●各窓口対応が引き継がれより細やかなサービスを提供 マーケティング
オートメーション●地域別、年代別など多様なマーケティング分析にもとづく
企画の実現
新規事業:アウトバウンド
リフォームショップERA
CRM●エンドユーザーに対するターゲットリストの
作成、イベント設定、対応履歴、効果進捗管理 など
基本情報+付随情報
<●▲■様情報>• 基本情報(氏名・住所・℡・・・)
• 問合せ履歴• ショールーム来館履歴• 所有者登録、ケアサービス会員登録• EC発注履歴• 修理履歴 ・・・・・・
ターゲットリスト
25
共通ID 名前 Tel 住所 元Sys 個人ID 世帯ID 選択
U00001 田中 一郎 0336381111 東京都江東区大島1-1-1 所有者 G00001 F00001 ●
U00002 田中 一郎 0336381111 東京都江東区大島1-1-1 ケアサービス G00001 F00001 〇
U00101 田中 花子 0336381111 東京都江東区大島1-1-1 ケアサービス G00002 F00001 〇
U00201 佐藤 太郎 0336381111 東京都千代田区丸の内3-3-3
所有者 F00002 F00002 〇
修理受付センターでの活用イメージ
入電:0336381111
CRM:0336381111で自動検索
電話番号が一致したデータのリストを表示
お客様
修理相談の電話
修理受付センター(修理相談)
詳細情報
オペレータはお名前等を伺って該当データを選択。「詳細情報」へ検索:
※電話番号によるヒット無し、またはお客様の氏名と合致しないときは、氏名で検索
顧客情報詳細画面に遷移・基本情報
・会員情報・問合せ履歴・…
26
マーケティングでの活用イメージ
DM配信最適化: ユーザ所有商品登録のデータをベースにして、特定のショールーム来館誘導やリフォームフェアのDMを発送する。このとき、ショールームから自宅までの距離 X km圏内の顧客を抽出する。さらに築年数や過去の問合せ・修理履歴のデータソースにある変数を基にモデルを最適化していく。
X Km圏内
27
顧客情報一元化PJ 顧客情報一元化システムの流れ
アナリスト
マーケター
LIXIL社内システム
LIXIL社内情報
LIXIL社外情報
相談センターなど
XX登録情報など
カスタマー部門
マーケティング部門
データ解析部門
S
窓口
顧客情報一元管理システム(Hadoop) Webサービス
電話帳など
顧客接点履歴情報
(個人情報無)
個人情報
検索
ダウンロード
集計分析
クレンジング
マーケティング施策結果
データ解析
ダウンロード
集計分析
個人情報
データ解析
名寄せ処理
キャンペーン管理
• プロトタイプでは名寄せ処理に一日以上かかっていたこともありSparkで実装
BIツール
Hadoop/Spark の活用例-顧客情報一元化プロジェクト-
クレンジング
29
顧客情報一元化PJ 名寄せアルゴリズム ループ方式(当初案)
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C
002 A B XG
003 XH XI XJ
004 XK XL C
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG
003 XH XI XJ
004 XK XL C
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ
004 XK XL C
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ
004 XK XL C
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT 005
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT 005
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP
007 E XQ F
008 A XR F 001
009 XS D XT 005
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP 006
007 E XQ F
008 A XR F 001
009 XS D XT 005
記憶:006⇒001
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP 006
007 E XQ F
008 A XR F 001
009 XS D XT 005
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP 006
007 E XQ F 006
008 A XR F 001
009 XS D XT 005
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP 006
007 E XQ F 006
008 A XR F 001
009 XS D XT 005
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP 006
007 E XQ F 006
008 A XR F 001
009 XS D XT 005
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP 001
007 E XQ F 001
008 A XR F 001
009 XS D XT 005
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP 001
007 E XQ F 001
008 A XR F 001
009 XS D XT 005
※データID:行ナンバーでユニーク
※アニメーションが動きません
アルゴリズムの詳細は右記まで連絡ください:[email protected]
30
顧客情報一元化PJ 名寄せアルゴリズム 集約方式(改善案)
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ 名寄せID
001 A B C
002 A B XG
003 XH XI XJ
004 XK XL C
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C
002 A B XG
003 XH XI XJ
004 XK XL C
005 XM D XN
006 E XO XP
007 E XQ F
008 A XR F
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C 001
002 A B XG 001
003 XH XI XJ
004 XK XL C
005 XM D XN
006 E XO XP 006
007 E XQ F 006
008 A XR F 001
009 XS D XT
データID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C 001
002 A B XG 001
003 XH XI XJ 003
004 XK XL C 004
005 XM D XN 005
006 E XO XP 006
007 E XQ F 006
008 A XR F 001
009 XS D XT 009
Old ID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C
001 A B XG
003 XH XI XJ
004 XK XL C
005 XM D XN
006 E XO XP
006 E XQ F
001 A XR F
009 XS D XT
Old ID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C
001 A B XG
003 XH XI XJ
004 XK XL C
005 XM D XN
006 E XO XP
006 E XQ F
001 A XR F
009 XS D XT
Old ID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C 001
001 A B XG 001
003 XH XI XJ
004 XK XL C
005 XM D XN 005
006 E XO XP
006 E XQ F
001 A XR F
009 XS D XT 005
Old ID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C 001
001 A B XG 001
003 XH XI XJ 003
004 XK XL C 004
005 XM D XN 005
006 E XO XP 006
006 E XQ F 006
001 A XR F 001
009 XS D XT 005
Old ID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C
001 A B XG
003 XH XI XJ
004 XK XL C
005 XM D XN
006 E XO XP
006 E XQ F
001 A XR F
005 XS D XT
Old ID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C
001 A B XG
003 XH XI XJ
004 XK XL C
005 XM D XN
006 E XO XP
006 E XQ F
001 A XR F
005 XS D XT
Old ID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C 001
001 A B XG
003 XH XI XJ
004 XK XL C 001
005 XM D XN
006 E XO XP
006 E XQ F 001
001 A XR F 001
005 XS D XT
Old ID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C 001
001 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP 006
006 E XQ F 001
001 A XR F 001
005 XS D XT 005
Old ID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C 001
001 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP 006
006 E XQ F 001
001 A XR F 001
005 XS D XT 005
Old ID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C 001
001 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP 006
006 E XQ F 001
001 A XR F 001
005 XS D XT 005
Old ID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C 001
001 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP 001
006 E XQ F 001
001 A XR F 001
005 XS D XT 005
Old ID 条件Ⅰ 条件Ⅱ 条件Ⅲ New ID
001 A B C 001
001 A B XG 001
003 XH XI XJ 003
004 XK XL C 001
005 XM D XN 005
006 E XO XP 001
006 E XQ F 001
001 A XR F 001
005 XS D XT 005
※アニメーションが動きません
アルゴリズムの詳細は右記まで連絡ください:[email protected]
31
顧客情報一元化PJ クレンジング概要
ソースA
会員番号:AAA
購入日:2016/04/01
お客様氏名:斎藤 太郎お客様住所:東京都文京区xxx 9丁目9-9 アーバンコーポ201号室お客様電話番号:03-9999-9999
購入商品:トイレ
ソースB
会員番号:BBB
購入日:2017/10/10
お客様氏名:斉藤 太郎お客様住所:文京区xxx 9-9-9アーバンコーポ201
お客様電話番号:070-777-7777
購入商品:サッシ
同一人物のはずだがこのままなら同一人物として行動が追えない!!!
このままでは同一人物として紐づかない
32
顧客情報一元化PJ クレンジング例
例) 形式をそろえるクレンジング• 名前:姓名分割• 住所:都道府県、市区町村、町域、それ以外に分割• 電話番号:数字のみ10桁、11桁に変換• 郵便番号:数字のみ7桁に変換• 誕生日:数字8ケタ
データを補完するクレンジング• 住所:都道府県市区町村が入っていないデータは郵便番号から補完
データを統一するクレンジング• 名前:異体字の統一(日本には1,000組以上もの異体字が存在する)• 住所:異体字の統一(「ヶ、ケ、が、ガ」「の、ノ」「ツ、っ、ッ」等)• 住所:町域以降の 丁目、番地をハイフンに変換、号室、号の削除• 住所:町域以降の数字を全角英数字に変換
汚いデータを取り除くクレンジング• 郵便番号:辞書と一致しないものは空白で置き換え• 電話番号:市外局番、080、090、070と先頭一致しないものは空白で置き換え• 誕生日:有効誕生日でないものは空白で上書き
汚いデータをクレンジングするだけでなく、ソースが違えば入力形式が違うので揃えなければならない。
約8万件の苗字リストと照合
日本郵便の出している住所/郵便番号リスト
約8万件と照合
日本郵便の出している住所/郵便番号リスト約14.2万件と照合
33
顧客情報一元化PJ クイズ
さいとうの「さい」の字は何パターンあるでしょう?
34
顧客情報一元化PJ クイズ
「さいとう」さんランキング一位:斎藤(15万0494件)二位:斉藤(7万3424件)三位:齋藤(1万7071件)四位:齊藤(1,111件)
31パターン!
35
顧客情報一元化PJ クレンジング処理速度比較(姓名分割)
クレンジングルール
• 約8万件の苗字辞書と姓名が分割されていないデータをマッチングし姓名分離• 異体字統一(320組)
• 3,000万件の姓名が分離されていないデータを用意
データ
ハードウエア
Hadoop
使用エンジン Spark ver 2.1
使用言語 Python (Pyspark)
台数 16台(M:1,S:15)
CPU 8Core
RAM 32GB
m4.2xlarge (AWS)
使用エンジン Local PythonVer 3.4
使用言語 Python
台数 1台
CPU 8core
RAM 32GB
VS
36
顧客情報一元化PJ 姓名分割処理速度比較
2104
8.10
500
1000
1500
2000
2500
Python3.4(x4.2large)
Pyspark(16台)
分
Local Pythonと比べ
約260倍速い!
Sparkはデータ量の多いリスト(辞書)とのマッチングに強い!
37
顧客情報一元化PJ 処理速度比較(住所クレンジング)
クレンジングルール
• 郵便番号辞書(約14万件)から都道府県を補完• 住所を都道府県、市区町村、町域、それ以外に分割• 町域以降の統一(丁目、番地、号等)• 異体字統一(「ヶ、ケ、が、ガ」「の、ノ」「ツ、っ、ッ」「高、髙」「崎、﨑」)
• 3,000万件の都道府県市区町村を除いた住所データを用意 データ
ハードウエア
Hadoop
使用エンジン Spark ver 2.1
使用言語 Python (Pyspark)
台数 16台(M:1,S:15)
CPU 8Core
RAM 32GB
M4.2xlarge (AWS)
使用エンジン Local PythonVer 3.4
使用言語 Python
台数 1台
CPU 8core
RAM 32GB
VS
38
顧客情報一元化PJ 処理速度比較(住所クレンジング)
2458.6
2.80
500
1000
1500
2000
2500
3000
Python3.4(x4.2large)
Pyspark(16台)
分
Local Pythonと比べ
約878倍速い!
39
顧客情報一元化PJ LIXILさんこんなデータがありました
• 会員番号使い回し
• 甘日市市(廿日市市)
• 東京都墨田区横綱(横網)
• 陸汁太郎
• `^*%$# のような記号だけの名前
• 誕生日が未来人(2100年 生まれ)
Hadoop/Spark の活用例-顧客情報一元化プロジェクト-
名寄せ
41
顧客情報一元化PJ 名寄せ強度
目的によって名寄せの強度は変わってくる
紐付け度合 厳しめ 緩め
特徴 確実に同一人物と考えられる場合にくっつける。判断に迷うようなケースは別人として扱う
確実性は低くてもある程度の属性が一致すれば同一人物としてくっつける
正確性 高 低
網羅性 低 高
発生する過誤 本当は同一人物なのに別人として扱われる
本当は別の人なのに同一人物として扱われれる
過誤による影響 顧客の行動が紐付かず、このサービスを受けている人はこの商品も買っている等の行動が分析できない
窓口で、この商品も買ってくれていますねという話題を出したが、間違っており不信感を持たれてしまう
42
顧客情報DB PJ 名寄せ条件
世帯• 姓 + 住所(番地、部屋番号まで含めた完全一致)• 姓 + 郵便番号 + 固定電話番号• 姓 + 都道府県 + 市区町村 + 固定電話番号• 姓 + 郵便番号 + 携帯電話番号• 姓 + 都道府県 + 市区町村 + 携帯電話番号• 姓 + 郵便番号 + メールアドレス• 姓 + 都道府県 + 市区町村 + メールアドレス• 住所(番地、部屋番号まで含めた完全一致) + 固定電話番号
➢ 以下いずれかの条件が一致した場合は同一人物(世帯)として扱う。(空白は一致とはみなさない)➢ 「+」は and 「・」は or 条件
個人_厳• 姓 + 名 +会員番号• 姓 + 名 + 住所(完全一致)• 姓 + 名 + 固定電話番号• 姓 + 名 + 携帯電話番号• 姓 + 名 + メールアドレス
個人_緩• 姓 + 名 +会員番号• 姓 + 名 + 都道府県 + 市区町村• 姓 + 名 + 固定電話番号• 姓 + 名 + 携帯電話番号• 姓 + 名 + メールアドレス• 姓 + 名 + 生年月日• 姓 + 名 + 郵便番号
5条件 7条件
8条件
43
顧客情報一元化PJ 名寄せの状況
名寄せ前後の比率
ソース名個人【厳】名寄せ率
個人【緩】名寄せ率
世帯名寄せ率
合計 60.3% 62.2% 65.6%
10年経過製品所有者リスト 0.2% 0.5% 0.3%
ケアサービス会員情報 0.3% 0.9% 0.4%
ECサイト①会員情報 0.6% 0.6% 0.6%
ECサイト②会員情報 1.4% 1.5% 1.6%
苦情情報履歴 1.8% 2.2% 3.0%
オンライン会員 2.4% 3.1% 3.4%
10年経過製品対応履歴 9.2% 9.4% 7.8%
10年経過製品点検対応履歴 16.4% 16.7% 14.9%
リフォームフェア来場顧客情報 16.4% 16.9% 19.8%
問い合わせ対応履歴 24.3% 25.6% 40.8%
ECサイト①購入履歴 28.6% 28.8% 30.3%
所有商品登録情報 35.5% 36.3% 38.1%
ショールーム来館情報 37.7% 38.6% 39.1%
商品カタログ請求履歴 60.5% 61.9% 62.1%
修理受付履歴 64.8% 66.5% 65.9%
ECサイト②購入履歴 68.0% 68.3% 72.8%
LIXILオンライン購入履歴 84.7% 84.8% 84.8%
60%以上が名寄せされた
44
顧客情報一元化PJ 処理速度検証
ハードウエア
Hadoop
使用エンジン Spark ver 2.1
使用言語 Python (Pyspark)
台数 16台(M:1,S:15)
CPU 8Core
RAM 32GB
M4.2xlarge (AWS)
使用エンジン Local PythonVer 3.4
使用言語 Python
台数 1台
CPU 8core
RAM 32GB
VS
概要
データ件数
• 約3,844万件• 17ソース
• 前頁の条件で名寄せし、PySparkとpythonの処理速度を計測する
45
顧客情報一元化PJ 処理速度検証
2721
610
500
1000
1500
2000
2500
3000
Python3.4(x4.2large)
Pyspark(16台)
分
Local Pythonと比べ
約45倍速い!16倍以上の速さとなった。Sparkのインメモリエンジンが優秀!
46
顧客情報一元化PJ 処理速度検証
Hadoop 21台
使用エンジン Spark ver 2.1
使用言語 Python (Pyspark)
台数 21台(M:1,S:20)
CPU 8Core
RAM 32GB
VS
データ件数
• 38,445,235件
Hadoop 16台
使用エンジン Spark ver 2.1
使用言語 Python (Pyspark)
台数 16台(M:1,S:15)
CPU 8Core
RAM 32GB
Hadoop 11台
使用エンジン Spark ver 2.1
使用言語 Python (Pyspark)
台数 11台(M:1,S:10)
CPU 8Core
RAM 32GB
47
顧客情報一元化PJ 処理速度検証
分
6台は処理途中メモリ不足でダウン
78
6156
7.388.39
10.11
0
2
4
6
8
10
12
14
0
10
20
30
40
50
60
70
80
90
11台 16台 21台
時間(分)
料金($)
ノードを倍にしたからと言って単純に処理速度が倍になるわけではない。処理時間、クラスタスペック、料金等を考えて処理に割り当てるリソースを考える必要がある。
$
※AWSのEC2の1時間のm4.2xlarge料金を分に換算して計算
※
48
顧客情報一元化PJ 工夫した点・改善要望点
工夫したクレンジング• 住所を都道府県、郡市区町村、町域、その他に分割するとき、最初はすべて辞書を使って分けていたが、処理がとても重かったのに加えて、市町村合併して名前が変わったものを分割できなかったため、郡市区町村と町域に関して正規表現を使い、処理の軽量化、市町村合併への対応を行った。
• Spark RDDよりDataframeの方が速いのでUDFを作ってなるべくDataframe型で処理(特にPysparkのRDDはJava/Scalaと比べてもおそいので)
• 速さを第一としてたのでHive on TezよりもMaxリソースでSparkSQL
今後の展望/まとめ
50
LIXIL情報分析基盤 今後の展望
コールセンター系
生産系
小売り系
研究部門
LIXILでは様々な分野のデータ解析にそれぞれ取り組んでいるので、Hadoopを活用しさらなるデータ活用利用を推進していく
LIXILのデータ解析取組例
• 売上データ特徴分析• POSデータ解析
• VOCポジ/ネガ判別• コールセンター着信件数予測• コールセンター最適配置
• 木材断面の画像解析• キッチン行動パターン動画解析
• 生産ライン分析• 工場IoT解析
その他
• アクセスログ経路分析• SNS口コミ解析
51
まとめ
Hadoopは大量のデータを取り込んでETL処理(「データの前処理」、「クレンジング」)を行うのに長けている
名寄せ処理はアルゴリズムによって計算量に大きな差が出る
ソースによってデータの癖が違うので、クレンジング精度を高めるためにはソースごとにクレンジング処理を考えるべきである
台数によって速くなる処理もあればそこまで変わらない処理もあるのでリソースをどれくらい割り当てるか試してみる価値有
手元にあるデータたちは意外と名寄せされる
ぜひ皆さんも、Sparkを使って名寄せしてみてはいかがでしょうか
52
ご清聴ありがとうございました