machine - magentoinfo2.magento.com/rs/magentoenterprise/images/magentolive uk 2… · magento...
TRANSCRIPT
machine learning Magento
&
About me
Dhruv Boruah
Co Founder, Reckless.io
Agenda
Agenda
• Your KPIs
• Session Goal
• Interesting Magento Data
• Magento Case
• Tools/How?
• Demo
• Q&A
Your KPIs
• Are you asking the right questions?
• How much do you know about your
customers?
• AOV/LTV/GPM
• Sales/Returns/Shipping
• Churn Rate
• Abandonment Rate
• …
External Factors • Weather/ Forex/
Holiday/Newsletters
• Census (birth/death/age)
• …
Machine Learning
A branch of artificial intelligence,
concerns the construction
and study of systems that
can learn from data.
Source: http://en.wikipedia.org/wiki/Machine_learning
Session Goal
How to predict
customer behavior
using machine learning?
Interesting Magento Data
1. log_visitor_online (visitor_id, type, ip, customer_id, last_url )
2. log_visitor (visitor_id, session_id, first & last visit, last_url, store)
3. Viewed product (visitor_id, customer_id, product_id, store)
4. Aggregated viewed products(view_num, price, name, store)
5. Quote tables
Magento Case
Case
“Retailer A” trades in:
Clothing/ Toys/Shoes/Home etc.
Goal:
• Predict “checkout intent” of online customers
• Deliver personalize promotion to prevent cart abandonment
Tools
How?
How?
Listens for events
Does delta sync
Processes responses
Magento
Extension
Scalable
Infrastructure
Slave Database
NoSQL
Google/Amazon
How?
YES
/NO
• Slave Database
• Flatten Magento Tables
• NoSql database
Data Warehouse
• Transaction History
• Merchandising
• Operational
• Marketing
Modeling • Preparation
• Training
• Predict
Predict
Training Model
Successful
Checkouts
Created date/time
Remote IP
Base subtotal
Items
Customer is guest
Category
Location
…
Training
Model
Unsuccessful
Checkouts
Demo
Questions/Comments?
@dhruvboruah
+44-786 838 2320
https://github.com/reckless-io/prediction
Sisyphus Inspiration
Tests should be independent from each other
Full test suite should run as quickly as I want
Maintaining tests should be easy and cheap
Tests should be stable, robust and [here your next lovely buzzword]
… and it would be really better if we wouldn’t require them at all!
“A dream you dream alone is only a dream.
A dream you dream together is reality.”
John Lennon
Reality
Extremely Extensible
Core
Continuously Changing Business
Modular Platform
Multi - Language
- Theme
- Website
- Tenant
Dreams
$superF = new SuperFramework();
$superF->Ineed(‘result’);
$superF->toGo(‘start’);
$superF->andClick(‘whatever’);
$superF->andDo(‘something’);
$superF->andClick(‘done’);
$superF->andGet(‘success’);
Top Layer
• BDD
• Code Generators
Mid Layer
• Framework
Low Layer
• PHPUnit
• Selenium
More DECLARATIVE
More IMPERATIVE
?
MTF Components
System Under Test Direct Access
Handlers
Fixtures (and Repositories)
Selenium Driver
Page Objects (Pages, Blocks, Elements)
Test Cases (Pre-conditions, Scenario, Constraints)
Tools and Utils
Low Layer
Test Cases
/**
* Run create product test
*
*/
public function testCreate(CatalogProductSimple $product, CatalogCategory $category)
{
$this->productGridPage->open();
$this->productGridPage->getProductBlock()->addProduct($product->getTypeId());
$productBlockForm = $this->newProductPage->getForm();
$productBlockForm->fillProduct($product, $category);
$this->newProductPage->getFormAction()->save();
}
Page Objects namespace Magento\Mtf\Test\Page\Area;
use Mtf\Page\Page;
class TestPage extends Page
{
const MCA = 'testPage';
protected $_blocks = [
‘rootBlock' => [
'name' => ‘rootBlock',
'class' => 'Magento\Mtf\Test\Block\RootBlock',
'locator' => 'body',
'strategy' => 'tag name'
]
];
public function getRootBlock()
{
return $this->getBlockInstance(‘rootBlock');
}
}
<page mca="testPage">
<block>
<name>testBlock</name>
<class>Magento\Mtf\Test\Block\TestBlock</class>
<locator>body</locator>
<strategy>tag-selector</strategy>
</block>
</page>
Constraints namespace Magento\Mtf\Test\Constraint;
use Mtf\Constraint\AbstractConstraint;
use Magento\Mtf\Test\Page\Area\TestPage;
use Magento\Mtf\Test\Fixture\Test;
class PageOpenSuccess extends AbstractConstraint
{
protected $severeness = 'low';
public function processAssert(TestPage $page, Test $fixture)
{
//
}
public function toString()
{
//
}
}
<constraint>
<pageOpenSuccess module="Magento_Mtf">
<severeness>low</severeness>
</pageOpenSuccess>
</constraint>
Fixtures namespace Magento\Mtf\Test\Fixture;
use Mtf\Fixture\InjectableFixture;
class Test extends InjectableFixture
{
protected $fieldName = [
'attribute_code' => 'code',
'frontend_input' => 'input_type',
'frontend_label' => 'Label'
];
public function getFieldName()
{
return $this->getData('fieldName');
}
}
<fixture>
<fixtureName module="Magento_Mtf">
<fields>
<fieldName>
<attribute_code>code</attribute_code>
<frontend_input>input_type</frontend_input>
<frontend_label>Laber</frontend_label>
</fieldName>
</fields>
</fixtureName>
</fixture>
Repositories namespace Magento\Mtf\Test\Repository;
use Mtf\Repository\AbstractRepository;
class TestRepository extends AbstractRepository
{
public function __construct()
{
$this->_data[‘identifier_value_1'] = [...];
$this->_data['didentifier_value_2'] = [...];
}
}
<fixture>
<fixtureName module="Magento_Mtf">
<type>blank|flat|eav</type>
<entity_type>entity_type_code</entity_type>
<collection>Resource Collection</collection>
<identifier>Unique Field/Attribute Name</identifier>
<fields>
<…>
</fields>
</fixtureName>
</fixture>
Low Layer
Mid Layer
Application Sates Iterator
Feature #17
Test Cases Iterator
Configuration Profile #1
Configuration Profile #2
Configuration Profile #3
Configuration Profile #4
Configuration Profile #n
Dataset #1
Dataset #2
Dataset #3
Dataset #4
Dataset #n
Test Case Scenario
Constraints
Low Layer
Mid Layer
Top Layer
Low Layer
Mid Layer
Top Layer
good things
Parallel Execution
Test Isolation Levels
Test Runners and Iterators
Event Manager
Logging and Reporting
Sample Database Management Tool
“I dream my painting and I paint my dream.”
Vincent van Gogh
VS
Magento Testing Framework The testing framework that does speak Magentish
Q&A Q&A Q&A
Magento Testing Framework Guidelines
Developer's Guide / Testing
magento/mtf magento/magento2
Magento
Performance
Toolkit
William Harvey
Principal Product Manager
Magento
Performance Toolkit
Magento Performance Testing – Control Variables
Test Protocol
Load Generator
Merchant Traffic Profile
Reference Store
Magento Platform
Environment
Reference System Architecture
Load Generator
• Hardware
• Developer’s Performance System
• Software
• Apache jMeter 2.11 r1554548
• JMeterPlugins-Standard, JMeterPlugins-Extra
Merchant Traffic Profile / Reference Store
Profile Websites Categories Simple Products Configurable Products
Small 1 30 800 50
Medium 1 300 16,000 1,000
Large 3 1,000 40,000 25,000
XL 5 3,000 800,000 50,000
Magento Platform
• Magento Version
• EE 1.13.1.0
• Patches Applied
• PHP 5.4 Compatibility Patch
• Scalability Patch (SUPEE-3818)
Environment (Hardware) – Desktop Example
• Developer’s Performance System
• CPU = 3.5 GHz, Quad-Core i7 (i4770k)
• RAM = 32 GB
• HDD = Sata III, Intel 530 Series 180GB SSD
Environment (Hardware) – Virtual Server Example
• Cloud Application Server
• CPU = 2x vCPU, 2.3 GHz (Xeon E5-2530)
• RAM = 7 GB
• Cloud Database Server
• CPU = 4x vCPU, 2.3GHz (Xeon E5-2530)
• RAM = 7 GB
Reference System Architecture – Examples
Environment (Software)
• MySQL 5.4.38
• PHP 5.4.30
• Redis 2.6.17
Environment (Software) – Example variables
• noatime, nodiratime
• no write barriers (barriers=0)
• swappiness = 10
• max file descriptors = 65535
Test Protocol – Example
1. Prepare environment
a. Provision servers and load system software
b. Install Magento and apply patches
2. Execute generate.php to populate the store
3. Run performance.jmx once to prime the cache
4. Run performance.jmx again and report results
Lessons Learned
What have we learned?
• Magento runs better on PHP 5.4 http://www.magentocommerce.com/knowledge-base/entry/php54-patch
What have we learned?
• Magento + PHP 5.3
Can see a major performance improvement with…
• Magento + Nginx + PHP-FPM
Is comparable to…
• Magento + PHP 5.4 + Opcache
What have we learned?
• Use redis as a cache backend for Magento
• Native support in CE 1.8, EE 1.12 & later
http://info.magento.com/rs/magentocommerce/images/MagentoECG-
UsingRedisasaCacheBackendinMagento.pdf
What have we learned?
• Importing is getting slower…
• Shopper experience is getting faster…
What have we learned?
• Magento 1.14 is faster than 1.13...
• Magento 1.14 is slower than 1.13…
What have we learned?
• Some extensions break caching…
• Magento EE FPC
• Nginx
• Varnish
What is coming?
What is coming?
• Performance Test Toolkit (1.12, 1.13, 1.14, 2.x)
• PHP Scripts (generate.php, indexer.php)
• jMeter Test Scripts (performance.jmx)
• Whitepaper: Magento Performance Test Guidelines
Q&A
Magento
Performance
Toolkit