본문 바로가기

데이터 분석

Spark - FP growth (FP tree)

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.







Support와 Confidence


Support : 전체 구매 중에서, 해당 아이템이 구매 되었을 확률


Confidence : 아이템 A 가 포함되었을 때 아이템 B 까지 구매 될 조건부 확률






□ 샘플


구매1 : 라면 계란 파
구매2 : 라면 쌀 파 만두
구매3 : 라면 파 과자
구매4 : 계란 과자 만두
구매5 : 계란 치즈 파 쌀 라면

 






이제 Support를 계산해 보자


 총 구매 정보는 5회이다. (샘플이니 횟수가 적다. ㅎㅎ)


 라면은 구매 5회 중에 4번 포함되어 있다. 이에, Support는 4/5임으로 80%가 된다.


 라면(80%) 계란(60%) 라면+파(80%) ....







Confidence 계산


 계산을 하면 좋지만 식만 ^^


 Lib에서 알아서 계산해 주는데 복잡하게 내가 할 필요성은 .. 그리고 기찮다.


 

 sup(X ∪ Y) / sup(X)

 






테스트 내용


그럼,어떤 제품들을 같이 구매하는지 조사를 진행하는데



1. 전체 구매 리스트 중에서 X라는 제품을 샀을 경우가 support > 50%가 넘고


2. 아이템 X 가 포함되었을 때 아이템 Y 까지 구매 될 조건부 확률 Confidence > 80%이 넘는



제품들에 대해서 알고 싶다고 하자!

 






테스트 진행


        SparkConf sconf = new SparkConf().setMaster("local[2]")

                                                  .setAppName("test")

                                                  .set("spark.ui.port", "4041");

        JavaSparkContext jsc = new JavaSparkContext(sconf);

       

        JavaRDD<String> data = jsc.textFile("sample_fpgrowth_test.txt");


        JavaRDD<List<String>> transactions = data.map(

          new Function<String, List<String>>() {

            public List<String> call(String line) {

              String[] parts = line.split(" ");

              return Arrays.asList(parts);

            }

          }

        );


        FPGrowth fpg = new FPGrowth()

          .setMinSupport(0.5)  

          .setNumPartitions(10); //작업을 배포하는 데 사용되는 파티션 수.

        FPGrowthModel<String> model = fpg.run(transactions);


        for (FPGrowth.FreqItemset<String> itemset: model.freqItemsets().toJavaRDD().collect()) {

          System.out.println("[" + itemset.javaItems() + "], " + itemset.freq());

        }


        double minConfidence = 0.8;

        for (AssociationRules.Rule<String> rule

          : model.generateAssociationRules(minConfidence).toJavaRDD().collect()) {

          System.out.println(

            rule.javaAntecedent() + " => " + rule.javaConsequent() + ", " + rule.confidence());

        }

 






결과


Support가 50% 이상인 아이템 리스트가 아래와 같고


[[라면]], 4
[[파]], 4
[[파, 라면]], 4
[[계란]], 3




이 아이템 리스트 중에 같이 샀을 확률이 80%가 넘는 경우는


[파] => [라면], 1.0
[라면] => [파], 1.0



이다. 라고 결과가 출력 된다.

 



이에 우리는 파와 라면은 구매자들이 함께 산다는 것을 예상 할 수 있고


제품 진열 위치를 가까운데 배치하면 매출이 오를 것이라는 생각을 할 수 있다.









'데이터 분석' 카테고리의 다른 글

Spark - Multiclass classification  (0) 2017.07.20
Spark - Isotonic Regression  (0) 2017.07.03
Spark - Hypothesis testing ( chi-squared test )  (0) 2017.06.22
Spark - Correlations (2)  (0) 2017.06.21
Spark - Correlations (1)  (0) 2017.06.21