MariGreen Farms (MGF) - Cannabis Grower

  

Cannabis Industry - Secondary Market Opportunities

  

EMPOWER WITH PRIME

  

Join the Green Rush!

  

Disaster restoration company

  

Floating Dock Company - Commercial / Residential

  

400 000 Warrants available for pre IPO USA Tech startup.

  

Pet Treat manufacture with huge growth potential in $28 billion dollar sector.

  

Commercial Roofing Opportunity- Lucrative Margins

  

Own part of renewable energy Anaerobic Digester in Canada with promising returns

  

Breathe Activewear

  

Silo Estate Investment Proposal

  

www.EthanTrader.com "Ethan" the Ethereum Trading Bot. 9X Gains Per Year.

  

New Lawn turfgrass company

  

Bakery Opportunity

  

You have found the perfect investment if..

  

Mobile Application for Planning Events

  

Own part of a Natural Gas station in Burnaby BC

  

Profitable Adventure Park Operator Requires Capital To Add More Locations

  

Lake Muskoka Marina - investment with lots of growth potential!

  

Franchise Opportunity

  

Canadian Cannabis Microgrower

  

Magnaboard Product Launch

  

Real Estate limited partnership / RE investment syndicate

  

Residential New Home Construction

  

Aumi Light

  

Cedars Taphouse & Grill

  

Multipurpose event venue catering specifically to PC and console gaming enthusiasts.

  

Apartment Development - High Cap rate

  

Automated Drive Thru Intelligent Assistant - via Artificial Intelligence

  

Restaurant Franchising Opportunity

  

Marina US, NC Yacht, Fish and Hunting Sports Center with year around activity

  

Cannabis Production Facility

  

BOAA - Blockchain powered video game

  

Silent Opportunity: $4.5MM for 20% of a Profitable Business Supporting Hydroponics

  

Make money 24/7 worldwide with WWW.BOOST.CLOTHING

  

"Shoot" Group Picture and Video Sharing App

  

Saskatchewan Grain Farm purchase, 21,000 acres

  

Let's Make Money Together!

  

Let's scale up and cash out!

  

 

Canadian Investment Network


Recent Blogs


Pitching Help Desk


Testimonials

"Thank you very much for the extra input with my Restaurant/Nightclub proposal. I already have a couple investors who are requesting more info, and that's less than 24hrs after submitting the proposal to you. I am very pleased."
Rodrick Agcaoili

 BLOG >> Business Models

Patterns of Innovation [Business Models
Posted on August 17, 2016 @ 08:52:00 AM by Paul Meagher

Clayton Christenson is known his for ideas around disruptive innovation. Clayton has studied how leading technologies and companies are displaced by startup companies. He observed a pattern in how they operated below the radar of the market leaders, how the market leaders success led to their own demise, how the technology often succeeds by turning non-consumers into consumers (e.g., personal computers), and so on. He has many documented case studies to support his theories about how disuptive innovation happens. His theory amounts to recognizing a pattern that many disruptive companies fit. There is some debate about whether you can use these disruptive innovation patterns to create or identity unicorn startups. I think the disruptive innovation pattern is definately worthy of study and you may be able to execute a startup or an investment based upon disruptive innovation theory.

Clayton's theory does not explain all examples of innovation as it is mostly focused on giving an account of innovations that result in an industry disruption. Are there other patterns of innovation that we might identify? After giving it some thought yesterday I came up with two more patterns of innovation that I call "Unlocking The Potential" and "Let A Thousand Flowers Bloom".

In real estate, one type of innovation is to "unlock the potential" of a site. There may be a building or site that other people do not regard that highly. A real estate innovator might see it quite differently and follow an execution pattern that turns that recognition into a project that creates increased value in the eyes of others as well.

The "let a thousand flowers bloom" type of innovation occurs when an innovator conducts a large number of simultaneous experiments in the hopes that a few of them might make it to the next round of experimentation. Through this process the entrepreneur hones in on the opportunities that seem most promising and viable. New farmers and pharmaceutical companies often exhibit this pattern of innovation.

Real estate and farming might not be regarded as particularly innovative industries; however, we all have to be innovative in some capacity to survive and trive. While a theory of disruptive innovation may explain alot of innovation we see in the news, it may not account for these less glamorous types of innovation. We need more than one pattern to recognize and characterize all the types of innovation that are out there.

Permalink 

Emporium Business Model [Business Models
Posted on September 21, 2015 @ 09:08:00 AM by Paul Meagher

One news story that interested me this weekend was news that musician and music producer Joel Plaskett was opening up an Emporium in the front part of a commercial space he owns. The back part is occupied by his recording studio, but on October 10th he will add three new tenants that compliment his own business and each other. In the front part of the Emporium he will house a vinyl record shop, a coffee and baked goods shop, and a hair cutting salon. You can read more about the Emporium on the New Scotland Yard website.

An emporium is like a small mall but owing to its smallness you have more control over the ambiance that you want to create in that space. The strength of this particular business model would seem to depend upon the careful selection of businesses that you want to have co-occupy the commercial space. Joel's first choice of occupant was probably Taz Records which has a long history of selling Vinyl records successfully even after all the big music stores have gone under selling music in more modern formats. Taz Records will compliment his studio business and his studio business will compliment Taz Records.

For many, browsing a good collection of vinyl records is even more pleasurable with coffee and people picking up a coffee might like to spend some time lounging in a vinyl record shop.

If I have to wait for my name to be called for a haircut, I would like to be able to have a coffee and perhaps browse some records. If I'm going to a coffee shop with some time to kill, maybe I'll be reminded of the haircut I should get.

The point is we can make up stories about how one business might compliment another business in an emporium. We can do this for a mall also, but it is harder to get it all working together and with the overall ambiance you might want to project.

In Joel's emporium he has a personal connection with many of the owners - they are not simply tenents, they are band mates and long time music acquaintances. Joel is already talking about hosting music events in the emporium which will help to create the type of music loving ambiance he wants to project.

It is too early to tell whether Joel's latest venture will be a success but I suspect he has found a better recipe for success than simply renting his commercial space out to whoever wants it. The emporium concept allows him to stack more functions in his commercial space and by making them somewhat complementary with each other and with his music studio business he is probably on a surer path to success than opting to simply rent out the space to the highest bidder. Joel as the proprietor of the emporium might also be generating more rental income for his space than if he rented only to one owner.

I'll end this blog with a bit of the lyrically clever and melodic music that Joel Plaskett is known for.

Permalink 

The Energese Language [Business Models
Posted on December 1, 2014 @ 07:34:00 AM by Paul Meagher

I have started to read a book by Howard T. Odum called Ecological and General Systems: An Introduction to Systems Ecology (1983).

I'm reading it because 1) I'm interested in systems theory generally, and 2) Howard Odum is often cited as having inspired the founders of Permaculture, Bill Mollison and David Holmgren, and I wanted to examine one of his books to see why. I'm taking an online Permaculture course and want to examine it's foundations more. Howard wrote many books, some I believe were meant for the general public. This is not one of them. So far the most remarkable feature of the book is the density of diagrams throughout. The book is 643 pages long and it is hard to believe that a person could produce so many detailed diagrams for a book. Many of these diagrams use his special energy circuit language the main elements of which are depicted in the energese diagram below.

.

The book is slow going at first as you learn the energese language and start seeing examples of it being used. The idea is to use these basic symbols to describe all kinds of processes, transactions, and systems in an energy-circuit-based language that consists of drawing various links and arrows from one type of energese symbol to another.

In this diagram the "system" is what is inside the bordered box. The inflows or forcing functions go into the system from outside the box and always dissipates some energy through a bottom energy sink symbol on the diagram. Energy is lost in the transaction as required by the second law of thermodynamics. This diagram depicts everything being lost in various thermodynamic energy transformations but often there are outputs from the system besides just heat or lost energy. It all depends on what you want to box into your analysis and what you want to leave outside of its scope.

I'm on chapter three dealing with "Storage and Flow" now so my goal is to finish that chapter today (20 pages) and browse around the rest of the book some more. There are some general nuggets of wisdom in this book that I hope to share with you this week. Doing so might end up requiring the use of the energese language so I'm introducing that today.

Some music that gave me some energese over the weekend was Matt May's song Ain't that the Truth from his album Coyote which won Rock Album of the Year 2014 at the Juno Music Awards.

Permalink 

Learning Systems Thinking [Business Models
Posted on June 19, 2014 @ 08:29:00 AM by Paul Meagher

In recent blogs, I've discussed some helpful insights from leaders in systems thinking (i.e., Twelve Leverage Points, Systems Thinking and Sustainability, Aspirational Networks of Collaboration, Diagramming Systems, Limits To Growth).

In todays blog I want to point you in the direction of three free and useful systems thinking resources you can use to learn systems thinking. All the resources I'll be discussing were developed by Gene Bellinger who has been actively promoting the spread of systems thinking through his wiki, youtube videos, and online systems modelling platform, insightmaker.com.

The first resource I want to share is the systemswiki.org website. Here you can find a hodgepodge of information about systems modelling and find ways to link up with other systems people.

The second resource I want to share is Gene Bellinger's YouTube Channel. Gene posts new YouTube videos on a regular basis and many of them usefully discuss his insight maker systems modelling platform.

The final and most important resource to mention is the InsightMaker.com website where you can develop and share models with a large community of other systems modellers.

So if you have an interest in learning more about the nuts and bolts of systems thinking, the wiki, youtube channel, and online systems modelling platform/community developed by Gene Bellinger are a good place to begin your journey.

Gene is offering a Systems Thinking Certification course as one way to sustain his enterprise. He would be well qualified to do so given the obvious contributions he has made to the community. Here is an overview of the certification program which is being offerred for the first time so there are still glitches to be worked out in this first iteration of the certification program.

Permalink 

Twelve Leverage Points [Business Models
Posted on May 30, 2014 @ 10:06:00 AM by Paul Meagher

Lately I've been studying systems thinking and have blogged recently about some of what I've learned (i.e., Systems Thinking and Sustainability, Aspirational Networks of Collaboration, Diagramming Systems, Limits To Growth). My recent interest in this area has been inspired by my discovery of, and appreciation for, the work of the late Donella Meadows. I'm nearing the end of her book Thinking in Systems: A Primer (2008) Chelsea Green Publishing. Her second last chapter is "Leverage Points - Places to Intervene in a System" and in today's blog I want to share some of her thinking on finding leverage points in a system.

It is an interesting exercise to develop systems models so that you can better understand a particular system such as a business in a particular industry and the factors leading to its growth or decline. The business could be represented as a capital stock that is subject to positive feedback loops leading to growth and negative or balancing feedback loops constraining or leading to the decline of capital stock. This is all fine and good, but how do we influence the system so as to increase the growth of the business or change it in some other manner (e.g., towards a goal of efficiency, sustainability, democracy, etc...). The answer is that we have to find the leverage points in the system that enable us to make the desired changes.

Finding a leverage point in a system is easier said than done. Even when you find the leverage point, there is the disturbing tendency in complex systems to react in the exact opposite way you want the system to when you start to apply leverage. We all know this system tendency when trying to raise children to be polite, hardworking, and rule abiding. Sometimes our interventions produce the exact opposite result. So finding the appropriate leverage point or points and applying leverage in the appropriate way are both difficult and subtle undertakings.

An important benefit of systems thinking is that it allows us to appreciate the large number of possible leverage points that any system has and that some of these leverage points have a greater or lesser effect on the system than others. Donella compiled a list of 12 leverage points in her thinking about systems which I want to share with you today. You can read Donella's book to find more discussion on the nature of these leverage points. They are extremely useful to be aware of and to think about if you want to change a system in some way. The 12 leverage points are listed below with the least powerful interventions first followed by the most powerful interventions at the bottom. Keep in mind that sometimes you don't want or need to use the most powerful interventions and oftentimes we end up using weak interventions when we try to change a system when more powerful ones are required. So without further ado, here are the 12 leverage points with some discussion (this was reproduced from Wikipedia's page Twelve leverage points which uses a Lake as the system under consideration):

  1. Constants, parameters, numbers (such as subsidies, taxes, standards)

    Parameters are points of lowest leverage effects. Though they are the most clearly perceived among all leverages, they rarely change behaviors and therefore have little long-term effect.

    For example, climate parameters may not be changed easily (the amount of rain, the evapotranspiration rate, the temperature of the water), but they are the ones people think of first (they remember that in their youth, it was certainly raining more). These parameters are indeed very important. But even if changed (improvement of upper river stream to canalize incoming water), they will not change behavior much (the debit will probably not dramatically decrease).

  2. The size of buffers and other stabilizing stocks, relative to their flows

    A buffer's ability to stabilize a system is important when the stock amount is much higher than the potential amount of inflows or outflows. In the lake, the water is the buffer: if there's a lot more of it than inflow/outflow, the system stays stable.

    For example, the inhabitants are worried the lake fish might die as a consequence of hot water release directly in the lake without any previous cooling off.

    However, the water in the lake has a large heat capacity, so it's a strong thermic buffer. Provided the release is done at low enough depth, under the thermocline, and the lake volume is big enough, the buffering capacity of the water might prevent any extinction from excess temperature.

    Buffers can improve a system, but they are often physical entities whose size is critical and can't be changed easily.

  3. Structure of material stocks and flows (such as transport network, population age structures)

    A system's structure may have enormous effect on operations, but may be difficult or prohibitively expensive to change. Fluctuations, limitations, and bottlenecks may be easier to address.

    For example, the inhabitants are worried about their lake getting polluted, as the industry releases chemical pollutants directly in the water without any previous treatment. The system might need the used water to be diverted to a wastewater treatment plant, but this requires rebuilding the underground used water system (which could be quite expensive).

  4. Length of delays, relative to the rate of system changes

    Information received too quickly or too late can cause over- or underreaction, even oscillations.

    For example, the city council is considering building the wastewater treatment plant. However, the plant will take 5 years to be built, and will last about 30 years. The first delay will prevent the water being cleaned up within the first 5 years, while the second delay will make it impossible to build a plant with exactly the right capacity.

  5. Strength of negative feedback loops, relative to the effect they are trying to correct against

    A negative feedback loop slows down a process, tending to promote stability. The loop will keep the stock near the goal, thanks to parameters, accuracy and speed of information feedback, and size of correcting flows.

    For example, one way to avoid the lake getting more and more polluted might be through setting up an additional levy on the industrial plant based on measured concentrations of its effluent. Say the plant management has to pay into a water management fund, on a weekly or monthly basis, depending on the actual amount of waste found in the lake; they will, in this case, receive a direct benefit not just from reducing their waste output, but actually reducing it enough to achieve the desired effect of reducing concentrations in the lake. They cannot benefit from "doing damage more slowly" -- only from actually helping. If cutting emissions, even to zero, is insufficient to allow the lake to naturally purge the waste, then they will still be on the hook for cleanup. This is similar to the US "Superfund" system, and follows the widely accepted "polluter pays" principle.

  6. Gain around driving positive feedback loops

    A positive feedback loop speeds up a process. Meadows indicates that in most cases, it is preferable to slow down a positive loop, rather than speeding up a negative one.

    The eutrophication of a lake is a typical feedback loop that goes wild. In a eutrophic lake (which means well-nourished), lots of life can be supported (fish included).

    An increase of nutrients will lead to an increase of productivity, growth of phytoplankton first, using up as much nutrients as possible, followed by growth of zooplankton, feeding up on the first ones, and increase of fish populations. The more available nutrients there are, the more productivity is increased. As plankton organisms die, they fall to the bottom of the lake, where their matter is degraded by decomposers.

    However, this degradation uses up available oxygen, and in the presence of huge amounts of organic matter to degrade, the medium progressively becomes anoxic (there is no more oxygen available). In time, all oxygen-dependent life dies, and the lake becomes a smelly anoxic place where no life can be supported (in particular no fish).

  7. Structure of information flow (who does and does not have access to what kinds of information)

    Information flow is neither a parameter, nor a reinforcing or slowing loop, but a loop that delivers new information. It is cheaper and easier to change information flows than it is to change structure.

    For example, a monthly public report of water pollution level, especially nearby the industrial release, could have a lot of effect on people's opinions regarding the industry, and lead to changes in the waste water level of pollution.

  8. Rules of the system (such as incentives, punishment, constraints)

    Pay attention to rules, and to who makes them.

    For example, a strengthening of the law related to chemicals release limits, or an increase of the tax amount for any water containing a given pollutant, will have a very strong effect on the lake water quality.

  9. Power to add, change, evolve, or self-organize system structure

    Self-organization describes a system's ability to change itself by creating new structures, adding new negative and positive feedback loops, promoting new information flows, or making new rules.

    For example, microorganisms have the ability to not only change to fit their new polluted environment, but also to undergo an evolution that makes them able to biodegrade or bioaccumulate chemical pollutants. This capacity of part of the system to participate in its own eco-evolution is a major leverage for change.

  10. Goal of the system

    Changing goals changes every item listed above: parameters, feedback loops, information and self-organization.

    A city council decision might be to change the goal of the lake from making it a free facility for public and private use, to a more tourist oriented facility or a conservation area. That goal change will effect several of the above leverage points: information on water quality will become mandatory and legal punishment will be set for any illegal effluent.

  11. Mindset or paradigm that the system — its goals, structure, rules, delays, parameters — arises from

    A societal paradigm is an idea, a shared unstated assumption, or a system of thought that is the foundation of complex social structures. Paradigms are very hard to change, but there are no limits to paradigm change. Meadows indicates paradigms might be changed by repeatedly and consistently pointing out anomalies and failures in the current paradigm to those with open minds.

    A current paradigm is "Nature is a stock of resources to be converted to human purpose". What might happen to the lake were this collective idea changed ?

  12. Power to transcend paradigms

    Transcending paradigms may go beyond challenging fundamental assumptions, into the realm of changing the values and priorities that lead to the assumptions, and being able to choose among value sets at will.

    Many today see Nature as a stock of resources to be converted to human purpose. Many Native Americans see Nature as a living god, to be loved, worshipped, and lived with. These views are incompatible, but perhaps another viewpoint could incorporate them both, along with others.

So the next time you decide that you want to intervene in a system, for example, to promote your business in your local newspaper, you might reflect on what type of intervention this is based on this list, how powerful that intervention is as a means to achieving your goal, and what other interventions might be possible. Donella's list of leverage points provides a useful resource for thinking about how to intervene in a system to make changes. To learn more, you can google "Twelve Leverage Points" and you'll find more discussion on these different types of leverage points applied to other example systems (as a result of such googling I came across Donella's chapter Leverage Points: Places to Intervene in a System which, in book form, inspired this blog). I'll end this blog with a nice visual representation of leverage points from Kallokain's blog post on Re-Imagining Agile. The Kallokain blog has some good blogs on systems thinking so check it out as well.


Permalink 

Diagramming Systems [Business Models
Posted on May 9, 2014 @ 08:21:00 AM by Paul Meagher

To attain better mastery of systems theory, I thought that a good exercise would be to diagram a system in the way that Donella Meadows suggested they be diagrammed by using a "stock and flow" diagram. Donella's book, Thinking in Systems: A Primer, provides many examples of system diagrams for many different types of systems. This is one reason it is such a useful book - it provides many templates to get you started with. The system that I chose to develop my own diagram for is Donella's version of the "Ecomomic System" (she calls it the "heart of the economic system"). I chose to diagram this system for two reasons: 1) It is an simple diagram of a complex system that nevertheless provides useful insight, 2) it includes most of the basic devices used in stock and flow systems diagramming. Here is my diagram of the "Economic System" which just tries to copy Donella's version (i.e., learn by copying):

The exercise of copying Donella's systems diagram helped me to recognize some of the finer details of her diagrams. One thing to note is the labels "R" and "B" in the middle of the two loops. The label "R" stands for Reinforcing. In other words, it is a factor that makes the capital stock increase. The label "B" stands for "Balancing". It is a factor that diminishes capital stock. In any system, there is at least one reinforcing component and at least one balancing component. One lesson we might take from this is that when we think about business growth we often focus on the reinforcing component that produces the growth but we should keep in mind that there are also balancing forces preventing that growth from happening. The idea of viral growth suggests only reinforcing growth is at play, but at some point even viral growth gets balanced out. Yin and yang.

Another aspect of the diagram to note is the arrows that point to the two taps that are not part of a loop. These are "control variables" that have an influence on the level of your capital stock. In this case, one control variable on the input tap is the "investment fraction" (fraction of output that is reinvested into the economy) and the other control variable on the output tap is the "capital lifetime" (how quickly infrastructure starts to fail). It is important to note that control variables are not always under the control of someone. Nature can be the controller in some cases. If climate becomes more extreme, the capital lifetime of infrastructure can be reduced significantly. In the case of home heating, the flow of heat out of your building is controlled by the balancing loop of the temperature outside and is moderated by the level of insulation in your house. The control variable, temperature outside, is set by nature.

What distinguishes systems diagrams from other forms of modelling is the use of reinforcing, balancing, and control variables to depict how the entity being modelled works. Other forms of modelling that have arrows pointing from one part to another part might bear a resemblance to systems models, but if they don't conceptualize the arrows as control, reinforcing, or balancing, then they are probably not systems models per se.

According to Peter Senge, "systems thinking is not about fighting complexity with more complexity. It simply means stepping back and seeing patterns that are, when seen clearly, intuitive and easy to grasp". So a stylistic note for systems diagramming is not to get carried away with drawing loops, arrows, and boxes. In many cases, you are looking for the simplist diagram that provides useful insight into the system.

To design my systems diagram I used the http://www.draw.io website. It is a very powerful free online tool for drawing diagrams that I would recommend you try out. It took awhile to find the shape library that I wanted to use to represent the tap symbol. It also took awhile to get used to creating and editing the parts of the diagram but towards the end I found diagramming was happening at a good clip. You can save your diagram in various output formats from svg to png. Join the fun and use draw.io to create your own systems diagrams!

Permalink 

Aspirational Networks of Collaboration [Business Models
Posted on May 7, 2014 @ 10:21:00 AM by Paul Meagher

In my last blog, Systems Thinking and Sustainability, I focused on the work of one leading Systems Thinker, Donella Meadows. Today I want to focus on the work of another leading Systems Thinker, Peter Senge, whose writings have been influential among business managers and organizational theorists.

Peter Senge promoted Systems Thinking in business, particularly management, with his best-selling business book The Fifth Discipline. More recently (2008), he wrote a book on sustainability called The Necessary Revolution. I haven't read the latter book because my wife discovered my recent purchase (second hand for $1.50) and she is reading it. She read his first book and says she is liking this one quite a bit. She is a manager in the Public Service.

I haven't watched a video of Peter Senge presenting in person so I searched on YouTube for any recent presentations he might have done to see what he is currently up to. I found a recent Youbube video (Oct. 2013) by Peter Senge doing a keynote presentation (1 hr 41 min) in which he discusses the importance of aspirational goals and networks of collaboration. Lots of interesting and useful ideas of relevance to the management of startups and innovative businesses. It provoked in me the idea that successful startups and innovative businesses might be conceptualized as Aspirational Networks of Collaboration, hence the title of this blog. The video below consists of Peter Senge delivering a presentation via teleconference for around 35 minutes. After that he takes questions. I'd recommend you to watch the first 22 minutes to get the aspirational networks of collaboration stuff, then flip to around the 35 minute mark to see him handle a few questions.

I have experience working in a poorly managed startup as an employee. I would rate as fairly important the idea that your employees have to be aspiring to a common goal if the organization is going to work. We had too many projects with no one project having most of the thunder. There was not enough rallying around a common cause, just a bunch of people working in different silos. We did manage to secure a good amount of funding because we had the networks of collaboration part running well through connections one of our founders had with a major investor and his network of associates. That network can fade away, however, if you are not producing economic results. The aspirational part is what helps you to do that. Without it, you are probably toast.

Permalink 

Systems Thinking and Sustainability [Business Models
Posted on April 30, 2014 @ 12:06:00 PM by Paul Meagher

The ability to engage in Systems Thinking is probably a good skill for an entrepreneurs and investors to have.

Lately, I've been trying to figure out how to incorporate Systems Thinking into my own skillset. One way is through taking my Permaculture Course which could be called Systems Thinking for Farmers and Gardeners. The goal of systems thinking is generally to create sustainable systems so any literature that deals with creating sustainable systems could exemplify systems thinking.

In an ideal world, the buildings and products claimed to be manufactured sustainably or using sustainable practices, would in fact incorporate enough systems thinking to earn such accolades. Often such claims are not real or substantiated because the designer did not take into account enough of the parts and their interrelationships. They fall short by not incoporating enough systems thinking into their design. They might have solved the reductive problem, but not the wholistic problem.

Systems Thinking is useful for designing sustainable systems, but is it useful for designing profitable systems? That is the million dollar question.

A good resource to use to get started with systems thinking is a book by Donella Meadors called Thinking in Systems: A Primer (2008) Chelsea Green Publishing.

Donella Meadows book was published posthumously based on a widely circulated but unpublished manuscript. She died in 2001 but left us with 4 fascinating Youtube videos that are worth watching. Here is the first:

One of Donella's best pedagogical devices was the stock and flow diagram she came up with to represent a systems model. I'd recommend you become familiar with it and how to use it if you want to use systems thinking in your own practice.

This prototypical version of the stock and flow diagram was lifted from a useful article by Peter Morville discussing systems thinking in the context of information architecture.

I hope to return to the topic of systems thinking in future blogs as I read more of Donella's book and think more about the concept of sustainability from a systems point of view.

Permalink 

Intro to Linear Programming: Part 1 [Business Models
Posted on September 25, 2013 @ 10:28:00 AM by Paul Meagher

Today I want to begin introducing you to a powerful optimization technique you might have occasion to use in your business. The technique is called Linear Programming and is the primary technique taught and used in Operations Research. Wikipedia defines Operations Research as "a discipline that deals with the application of advanced analytical methods to help make better decisions. It is often considered to be a sub-field of mathematics. The terms management science and decision science are sometimes used as synonyms".

Linear Programming is a fairly difficult technique to master because it involves some advanced math and the ability translate a business problem into a set of equations representing what it is you want to optimize (i.e., maximize or minimize the value of) and the constraints that exist upon how you can solve the problem (i.e., subject to constraints on labor, capital, machinery, time, etc...). The ability to translate a business problem into a set of equations is generally acquired by studying standard types of business problems that Linear Programming has been applied to and then using those example solutions as a template for applying the technique to your own similar situation.

In today's blog, I want to simply display the main set of formulas that are used in linear programming. I am reproducing the main linear programming formulas from the book Mathematical Programming for Agricultural, Enviornmental, and Resource Economics by Harry M. Kaiser & Kent D. Messer, Wiley, 2012. This was also an opportunity for me to take the MathJax library I setup yesterday for another test drive and learn more about how to add some professional looking math to my blog.

Here is the general form of the Linear Program (LP) model. First we need to define the objective function $Z$ that we want to maximize or minimize.

\[Z = c_1x_1 + c_2x_2 + ... + c_nx_n\]

Then we need to specify the various business constraints (labor costs, material costs, transport costs) that our business decision is subject to. These constraints are formulated in terms of equations with a left hand side being less than, equal to, or greater than some value in the right hand side:

\[a_{11}x_1\ + a_{12}x_2 + \cdots + a_{1n}x_n \lbrace {\le, =, \ge} \rbrace b_1\]

\[a_{21}x_1\ + a_{22}x_2 + \cdots+ a_{2n}x_n \lbrace {\le, =, \ge} \rbrace b_2\]

\[\cdots\]

\[\cdots\]

\[a_{m1}x_1\ + a_{m2}x_2 + \cdots+ a_{mn}x_n \lbrace {\le, =, \ge} \rbrace b_m\]

Finally, we generally add the constraint that all "activities" are non-negative (we can't have negative activity values in our production model).

\[x_1, x_2, \cdots x_n \ge 0\]

We'll explore the technique of linear programming in further detail in my next blog

Note: If you want to see the tex code used to generate the equations in this blog, all you have to do is right-click on the equation and MathJax supplies a viewer application for inspecting and copying the formulas.

Permalink 

Estimating Probability Distributions: Part 1 [Business Models
Posted on July 11, 2013 @ 07:56:00 AM by Paul Meagher

In my previous blogs on modelling revenue for a season of lobster fishing I was fortunate in having data I could work with that allowed me to specify detailed probability distributions for the main revenue factors in my revenue model. I modelled the distribution of catch sizes with a normal distribution and the distribution of prices with a categorical distribution (I knew what the 4 price points were and roughly what their relative probabilities were). I was able to make some fairly strong assumptions about how the revenue factors (catch size in lbs and price per lb) in my revenue model were probabilistically distributed.

When a startup is trying to model their expected revenues for a forecast period, there is often more uncertainty regarding how the relevant factors in their revenue model might be distributed (these "relevant factors" can also be called "random variables"). In such cases, we may need to resort to modelling these random variables (e.g., monthly sales) with distributions that are easier to specify and take better account of our level of uncertainty.

In this blog I want to discuss 2 distributions that are useful in such situations: a uniform distribution and a triangular distribution.

If you need to forecast the level of sales over a forecast period but are new to the market place and are uncertain as to what the uptake of your product or service will be; or are uncertain about the level of production that you might be able to achieve (e.g., crop yield using a new growing technique), then you might want to consider using a uniform distribution to represent your level of sales. Why a uniform distribution? To specify the parameters for a uniform distribution, all you need to specify are the upper and lower bounds of that distribution (denoted a and b in the graph below). You assume that the actual level of sales can fall anywhere within that range with equal probability (i.e., 1/(b-a)). Specifying the upper and lower bounds for your level of sales is significantly easier than specifying the expected mean and standard deviation for, say, your monthly sales figures. Also, it can be argued that a uniform distribution better reflects your more extreme state of uncertainty with respect to the variable you are trying to predict; namely, your level of sales for each month or quarter in your forecast period.

Figure 1: Uniform Probability Distribution

Source: http://en.wikipedia.org/wiki/Uniform_distribution_(continuous)

If you have a bit more confidence about what your most likely level of sales might be, and also what the upper and lower bounds of your sales might be, then you should consider using a triangular distribution to represent your uncertainty about your level of sales. To specify the parameters for a triangular distribution, all you need to specify are three values: the lower bound, the upper bound, and the most likely value (or modal value). These values are denoted as a, b, and c respectively in the graph below. The probability of your most likely value is computed using the formula 2/(b-a).

Figure 2: Triangular Probability Distribution

Source: http://en.wikipedia.org/wiki/Triangular_distribution

My library of probability distribution functions includes a UniformDistribution.php object and a TriangleDistribution.php object that could be used to generate random values from these distributions, after you specify the relevant parameters to them. This means that even under conditions of extreme uncertainty regarding expected sales, you may still be able to model expected revenue, and expected variance in revenue, if you opt to model your revenue factors using a uniform or a triangular probability distribution. In my lobster fishing example, if I was more uncertain about the catch size or catch price to expect, I might opt to use a uniform or a triangular distribution to model the distribution of possible catch sizes and catch prices rather than the normal distribution and categorical distributions I chose because I had more data to go on.

Permalink 

Revenue Model Sensitivity [Business Models
Posted on July 9, 2013 @ 07:36:00 AM by Paul Meagher

Yesterday I posted a completed revenue model for a season of lobster fishing. The major outputs of that model, total catch and total revenue, are actually very accurate with respect to this season's catch and revenue totals for lobster fishing. I'll talk a bit about the issue of model fit in this blog, but I mostly want to focus on what we might do with our revenue model now that we have 1) identified the major revenue factors, 2) specified the appropriate probability distributions for them, and 3) performed the appropriate math to generate revenue per unit time (e.g., per catch) and total revenue amounts. What we now need to do with our revenue model is try to understand its behavior better. When we execute the lobster fishing revenue model once it will generate one set of values for total catch and total revenue for a season. When we execute it again, it will generate a different set of values. This might leave you scratching your head as to what to make of this variability. Well, one thing we can do is rerun the model many times and use the computed season totals to generate some statistics that summarize what the mean season catch and season revenue is most likely to be. We can also compute how much variability there is in the season catch and season revenue totals by computing the standard deviation of these totals.

My latest script for revenue modelling is called lobster_fishing_sensitivity.php because its primary purpose is to do a sensitivity analysis of our lobster fishing revenue model. There is a section of the script below that contains various parameter settings. To do a sensitivity analysis all you do is start playing around with these parameter settings and see how the model output changes. This "playing around" can offer "model driven insight" into your business - how might my revenues be affected if this or that parameter value is changed (e.g., price of lobster, decay value, initial catch size, etc...). Playing around with your revenue model can help you to anticipate the future revenues of your business better.

The lobster_fishing_sensitivity.php script is well commented so I'll just present it as is and then show what the out put of the script looks like when I point my browser at it.

<?php

/**
* @script: lobster_revenue_sensitivity.php
* @author: Paul Meagher
* @modified: July 09/2013
* @about: Script to perform sensitivity analysis of a lobster fishing revenue model.
**/

// The probability distributions library sits 
// in the PDL folder at the same level as the 
// folder the script is run from.
//
// @see https://github.com/mrdealflow/PDL

require_once '../PDL/NormalDistribution.php';
require_once 
'../PDL/CategoricalDistribution.php';

// ArrayMath object I developed has some useful stats functions in it.
// @see http://www.phpmath.com/build02/IT1/docs/package.php?id=2#source

require_once '../UTIL/ArrayMath.php';

/*** PARAMETER SETTINGS FOR REVENUE MODEL - START ***/

// Set the number of catches per season.

$num_catches 40;

// Rate at which catch sizes decay (and corresponding standard deviation).

$k  = -0.03087;

// Initial catch size we will sample from (1000 lbs).

$N0 1000

// Initial catch size standard deviation we will sample from (250 lbs).

$S0 250;

// Specify categorical distribution for lobster prices (price and its probability).

$price_distribution = array('3.25'=>0.4'3.50'=>0.3'3.75'=>0.2'4.00'=>0.1); 

// Set the number of seasons you want the simulation to run for.

$num_seasons 100;

/*** PARAMETER SETTINGS FOR REVENUE MODEL - END ***/

// Model prices using a categorical distribution with price points and their probabilities.

$lobster_price_distribution  = new CategoricalDistribution($price_distribution);

for (
$s=0$s $num_seasons$s++) {
  
  
// Reset our array variables 
  
$lobster_catch   = array();
  
$lobster_price   = array();
  
$lobster_revenue = array();    

  for (
$c=0$c<$num_catches$c++) {
    
    
// Reduce the mean catch size after the first catch
    // according to exponential decay function.
    
$N $N0 exp($k $c);

    
// Reduce the standard deviation of catch size after the 
    // first catch according to exponential decay function.
    
$S $S0 exp($k $c);  
    
    
// Specify new catch size distribution for this trip.
    
$lobster_catch_distribution  = new NormalDistribution($N$S);
    
    
// Call random number generator RNG to sample values from 
    // catch size and catch price distribution.
    
$lobster_catch[$c]   = round($lobster_catch_distribution->RNG());
    
$lobster_price[$c]   = sprintf("%01.2f",$lobster_price_distribution->RNG());
    
$lobster_revenue[$c] = sprintf("%01.2f",$lobster_catch[$c] * $lobster_price[$c]);  

  }

  
// Store the season catch and revenue totals in arrays
  
$season_catch[$s]   = array_sum($lobster_catch);
  
$season_revenue[$s] = array_sum($lobster_revenue);
  
}

// ArrayMath object has some useful stats functions in its
// @see http://www.phpmath.com/build02/IT1/docs/package.php?id=2#source

$stats = new ArrayMath;

$season_catch_mean    sprintf("%01.2f"$stats->mean($season_catch));
$season_catch_stdev   sprintf("%01.2f"$stats->stdev($season_catch));

$season_revenue_mean  sprintf("%01.2f"$stats->mean($season_revenue));
$season_revenue_stdev sprintf("%01.2f"$stats->stdev($season_revenue));

echo 
"Season Catch Mean: $season_catch_mean lbs";
echo 
"<br>";
echo 
"Season Catch Standard Deviation: $season_catch_stdev lbs";
echo 
"<br>";
echo 
"Season Revenue Mean: $$season_revenue_mean";
echo 
"<br>";
echo 
"Season Revenue Standard Deviation: $$season_revenue_stdev";

?>

The output of the script looks like this:

Season Catch Mean: 23426.71 lbs
Season Catch Standard Deviation: 957.77 lbs
Season Revenue Mean: $81991.88
Season Revenue Standard Deviation: $3373.00

If we re-execute the lobster_revenue_sensitivity.php script many times, we will observe that the Season Revenue Mean value will change a bit on each execution. It will not change by that much, however, owing to some central limit stuff that is going on here. So what we are getting from this sensitivity script is a cleaner estimate of what predictions our revenue model is making. When we "fit" our revenue model to the data, it is these sensitivity stats that we should be evaluating our revenue model against and not the output of a single run of our revenue model. These sensitivity stats do in fact match up with the observed data for this season fairly well. This is a plausible revenue model for a season of lobster fishing and could be used to frame a revenue prediction (via parameter settings) for the next lobster fishing season .

Permalink 

A Lobster Fishing Revenue Model [Business Models
Posted on July 8, 2013 @ 09:51:00 AM by Paul Meagher

In my last blog on the topic of revenue modelling (using a lobster fishing season as an example), I talked about categorical price distributions and how they would be a better representation of how lobster prices vary than using a normal distribution to model prices.

I thought I would finish of the exercise in modelling lobster fishing revenue by presented the completed lobster fishing revenue model. There are two main differences between this version of the script and my last lobster fishing revenue script.

  1. This version represents the variation in prices using a categorical probability distribution rather than a normal distribution. I discussed how a categorical probability distribution works and why it is appropriate in my last blog.
  2. I simplified the looping structure for each catch. I didn't realize that e0=1. I thought the natural exponent e raised to the power of 0 was 0 so did some unnecessary coding for the first season's catch. It is good to know that e0=1 (see Exponential Functions at Wikipedia) as it help to understand how the exponential decay function works when $c = 0 (i.e., first catch of the season).

So without further ado here is the completed lobster fishing revenue model implemented as a PHP program:

<?php

/**
* @script: lobster_revenue_final.php
* @author: Paul Meagher
* @modified: July 08/2013
* @about: A model of lobster fishing revenue. 
**/

// The probability distributions library sits 
// in the PDL folder at the same level as the 
// folder the script is run from.
//
// @see https://github.com/mrdealflow/PDL

require_once '../PDL/NormalDistribution.php';
require_once 
'../PDL/CategoricalDistribution.php';


/*** PARAMETER SETTINGS FOR REVENUE MODEL - START ***/

// Set the number of catches per season.

$num_catches 40;

// Rate at which catch sizes decay (and corresponding standard deviation).

$k  = -0.03087;

// Initial catch size we will sample from (1000 lbs).

$N0 1000

// Initial catch size standard deviation we will sample from (250 lbs).

$S0 250;

// Specify categorical distribution for lobster prices (price and its probability).

$price_distribution = array('3.25'=>0.4'3.50'=>0.3'3.75'=>0.2'4.00'=>0.1); 

/*** PARAMETER SETTINGS FOR REVENUE MODEL - END ***/

// Model prices using a categorical distribution with price points and their probabilities.

$lobster_price_distribution  = new CategoricalDistribution($price_distribution);

?>
<table border='1'>
  <thead>
  <tr>
    <th>Catch #</th>
    <th>Price/LB</th>
    <th>Weight(LB)</th>
    <th>Revenue</th>
  </tr>
  </thead>
  <tbody>
  <?php
  
for ($c=0$c<$num_catches$c++) {
    
    
// Note: exp(0) = 1
    
    // Reduce the mean catch size after the first catch
    // according to exponential decay function.
    
$N $N0 exp($k $c);

    
// Reduce the standard deviation of catch size after the 
    // first catch according to exponential decay function.
    
$S $S0 exp($k $c);  
    
    
// Specify new catch size distribution for this trip.
    
$lobster_catch_distribution  = new NormalDistribution($N$S);
    
    
// Call random number generator RNG to sample values from 
    // catch size and catch price distribution.
    
$lobster_catch[$c]   = round($lobster_catch_distribution->RNG());
    
$lobster_price[$c]   = sprintf("%01.2f",$lobster_price_distribution->RNG());
    
$lobster_revenue[$c] = sprintf("%01.2f",$lobster_catch[$c] * $lobster_price[$c]);  
    
?>
    <tr>
      <td align='center'><?php echo ($c+1?></td>
      <td align='center'>$<?php echo $lobster_price[$c?></td>
      <td align='center'><?php echo $lobster_catch[$c?></td>
      <td align='center'>$<?php echo $lobster_revenue[$c?></td>
    </tr>            
    <?php
  
}
  
?>
  <tr>
    <td>&nbsp;</td>
    <th>Totals</th>
    <td align='center'><?php echo array_sum($lobster_catch?></td>    
    <td align='center'>$<?php echo array_sum($lobster_revenue?></td>
  </tbody>
</table>

Using a categorical distribution to model prices instead of a normal distribution does not appear to make a big difference in total seasonal revenue numbers produced by the model (around 80k) so we probably could have gotten away with using a normal distribution to model prices; but prices were not in fact distributed in this manner and I preferred the model to be truer to the pricing facts.

In my next blog I will take this revenue model and re-run it many times in order to better understand the behavior of the model and come up with some estimates of total expected revenue and total expected catch for a lobster fishing season.

Addendum

A week ago I had the pleasure of having a feed of lobster at a family event that my father-in-law held. He has a fishing boat. His two sons use it to fish lobsters, crabs, and tuna. They held aside some lobster for the event. Below is the cooked "feed of lobster" we had for the event.

I am not that proficient in shelling a lobster so asked for some tutoring. My sister-in-law Amanda demonstrated what is possibly the fastest and most efficient method possible for extracting meat from the tail of the lobster. The culinary schools do not even appear to teach this method. Amanda must have perfected this technique from having to shell so many lobsters for the menu at her new Backroads Bistro business. This is a 5 second video so you may have to rewatch to get how to do it.

Permalink 

Price Distributions [Business Models
Posted on June 28, 2013 @ 09:51:00 AM by Paul Meagher

An additional improvement we can make to the revenue model for our lobster fishing example involves a more realistic distribution of prices per lb for lobster. Previously we assumed that the distribution of prices was normally distributed around a mean of $3.50 a lb with a standard deviation of 25 cents per lb. This means that prices can range continuously around $3.50 with the probability of lower or higher prices falling off as we deviate from $3.50. A price as extreme $3.00 a lb is 2 standard deviations away from the mean price and is expected to occur for some catches when we represent lobster prices with a normal distribution with these parameter settings (e.g., mean=3.50, stdev=0.25).

The problem is that a price of $3.00 never occurred during the season. Also, the prices never varied continuously. Instead the prices only varied in 25 cent increments so there were really only 4 price points in our price distribution; namely, 3.25, 3.50, 3.75, and 4.00. Also, the lower prices in this range occurred more often than the higher prices. Using a normal distribution to capture the distribution of prices is a simple first approximation and may put us in the ballpark for the average prices over the season, but it does not reflect the true state of affairs with respect to what prices were possible and their probabilities of occurrence.

In order to construct a more realistic price distribution, we can opt to represent the distribution of prices with a categorical distribution. I also considered calling this distribution a discrete distribution or a multinomial distribution, but these terms carry a bit of extra baggage that I did not want to commit to at this time.

A categorical distribution consists of labels along with the associated probability of each label. Collectively the probabilities of all labels should sum to 1. The main problem I want to solve in today's blog is how to generate a random label from this distribution. My approach involves constructing a new distribution called CategoricalDistribution.php and developing a random number generator for that distribution.

Here is what a "bare bones" version of a CategoricalDistribution.php object looks like:

<?php 
/**
* @package PDL
*/
require_once "ProbabilityDistribution.php"

/**
* The CategoryDistribution class provides an object for encapsulating
* categorical distributions.
*
* @version 0.1
* @author Paul Meagher
*/

class CategoricalDistribution extends ProbabilityDistribution {
  
  var 
$distribution = array();
  var 
$tolerance    0.01;

  
/**
  * Constructs a category distribution.
  *
  * @param $distribution associative array of category labels and their probabilities.
  */
  
function CategoricalDistribution($distribution) {
    
$prob_sum array_sum($distribution);
    if (
abs(1.0 $prob_sum) > $this->tolerance)
      die(
"The probabilities do not sum to 1.");    
    
$this->distribution $distribution;
  }

  
/**
  * Uses inverse transform method to generate a random selection
  * from a categorical distribution.
  *
  * @return randomly selected category label according to category probabilities
  */
  
function _getRNG() {
    
$unit_rand  mt_rand() / mt_getrandmax();
    
$total_prob 0;
    foreach (
$this->distribution AS $category=>$prob) {
      
$total_prob += $prob;
      if (
$total_prob $unit_rand)
        return 
$category;
    }
  }

}
?>

One important aspect of this code to take note of is that the distribution includes a general ProbabilityDistribution.php object (located in the Probability Distributions Library that I developed). This object contains a random number generator function, called RNG(), that calls the private _getRNG() method in this code. The parent RNG() method (in the ProbabilityDistribution.php object) can call this private method multiple times if it is supplied with a number specifying how many times to call the private method; otherwise, it just returns one random category label. The CategoricalDistribution.php object is "bare bones" because it does not include a variety of other methods/functions that are usually included in probability distribution objects, such a methods for returning the mean, standard deviation, pdf values, cdf values, etc... for a distribution. Perhaps in the future I will add these additional methods after I have reviewed the literature, but for current purposes I only needed to implement the private _getRNG() method (private methods are often prefixed with an underscore to make their status as private methods more obvious).

To verify that the random variate generator for categorically distributed variables works as it should, I have developed a random_prices_test.php script that is supplied with a distribution of price points and their corresponding probabilities (i.e., $price_distribution = array('3.25'=>0.4, '3.50'=>0.3, '3.75'=>0.2, '4.00'=>0.1)). It generates 30 random prices and then outputs this array of 30 random prices.

<?php 

// @script: random_prices_test.php
// @author: Paul Meagher
// @modified: June 28/2013

// The probability distributions library sits 
// in the PDL folder at the same level as the 
// folder the script is run from.
//
// @see https://github.com/mrdealflow/PDL

require_once '../PDL/CategoricalDistribution.php';

$price_distribution = array('3.25'=>0.4'3.50'=>0.3'3.75'=>0.2'4.00'=>0.1); 

$lobster_price_distribution  = new CategoricalDistribution($price_distribution);

// Generate 30 random prices and output the prices

echo "<pre>";
print_r($lobster_price_distribution->RNG(30));
echo 
"</pre>";

?>

Here is what the output of this script looks like:

Array
(
    [0] => 3.50
    [1] => 3.50
    [2] => 3.75
    [3] => 3.25
    [4] => 3.50
    [5] => 3.75
    [6] => 3.25
    [7] => 4.00
    [8] => 3.75
    [9] => 3.25
    [10] => 3.50
    [11] => 3.75
    [12] => 3.50
    [13] => 3.25
    [14] => 3.25
    [15] => 3.75
    [16] => 3.25
    [17] => 3.50
    [18] => 3.25
    [19] => 3.50
    [20] => 3.50
    [21] => 3.75
    [22] => 3.25
    [23] => 3.50
    [24] => 3.25
    [25] => 3.25
    [26] => 3.75
    [27] => 3.50
    [28] => 4.00
    [29] => 4.00
)

Notice how the value 3.25 occurs more than other values and that a value like 4.00 occurs the least often. The random variate generator appears to be working as it should (more sophisticated tests than the eyeball method are possible but I'll spare you the details). We can use the CategoricalDistribution.php object in our next blog to construct a more realistic model of lobster fishing revenue.

Conclusion

In today's blog I introduced you to the idea of a categorical probability distribution because it is required in order to develop a more realistic model of lobster fishing revenue (i.e., lobster price points are distributed in a categorical manner). In general, when modelling revenue from a line-of-business you not only need to give careful consideration to whether the factors determining revenue are stationary or non-stationary (which I discussed in my last blog), but also whether the factor values are distributed in a continuous (e.g., lobster catch size) or a discrete manner (e.g., lobster prices). If you keep these two critical distinctions in mind then you should be able to generate much more realistic revenue models for your own line-of-business.

From a lobster buyer's point of view the price they are willing to pay for lobsters varies according to supply and demand aspects of their business. If we knew what these factors were, we might be able to develop a non-stationary representation of lobster prices that take these factors into account. Because sellers are often in the dark about the buyer's business, we must often be content to use a stationary price distribution to reflect our uncertainty regarding the price we can sell our goods for.

Permalink 

A Non-Stationary Revenue Model [Business Models
Posted on June 27, 2013 @ 09:10:00 AM by Paul Meagher

The underlying process that generates revenue for a line-of-business can be stationary or non-stationary in nature. A stationary revenue process is one in which the parameters for the probability distribution representing a revenue factor (e.g., average lobster price) is specified once for the period that your revenue model covers. A non-stationary revenue process is one in which you must specify the parameters multiple times (e.g., average lobster catch size) during the period that your revenue model covers. In my last blog I argued that in order to construct a more realistic revenue model for a lobster fishing season, we should take into account the fact that lobster catch sizes diminishes over the course of a season because the rate of extraction from the lobster fishing grounds exceeds the rate of replenishment as the season progresses. I argued that an exponential decay function is a useful function to use to represent how the catch size diminishes over the course of a season. I showed a worked example of the math required to estimate the relevant decay parameter k that captures how the catch size decreases over the course of the season.

In this blog, I want to illustrate how to integrate this non-stationary factor (i.e., catch size) into our lobster fishing revenue model. The essential observation is that we cannot be content to set the parameters of our catch size distribution (average catch size and standard deviation) only once, but instead need to set these parameters multiple times as we iterate through each catch of the season. In other words, the catch size distribution that we sample from changes after each catch; specifically, the mean and standard deviation parameters are reduced by a constant percentage after each catch. This better represents the true state of affairs with respect to how revenue is generated over the course of a lobster fishing season. Our first attempt at creating a revenue model for a lobster fishing season assumed that the lobster catch-size distribution was stationary over the course of a fishing season. Now we are assuming it is non-stationary so that we can construct a more realistic revenue model.

The new script that I developed to model lobster fishing is called lobster_revenue_with_decay.php and the code for that model is illustrated below. I was also informed that instead of the lobster season consisting of 28 trips, it will consist of around 40 trips this season so that is one other change to the revenue model I presented previously.

<?php

// @script: lobster_revenue_with_decay.php
// @author: Paul Meagher
// @modified: June 27/2013

// The probability distributions library sits 
// in the PDL folder at the same level as the 
// folder the script is run from.
//
// @see https://github.com/mrdealflow/PDL

require_once '../PDL/NormalDistribution.php';

/*** PARAMETER SETTINGS FOR REVENUE MODEL - START ***/

// Set the number of catches per season.

$num_catches 40;

// Rate at which catch sizes decay (and corresponding standard deviation).

$k  = -0.03087;

// Initial catch size we will sample from (1000 lbs).

$N0 1000

// Initial catch size standard deviation we will sample from (250 lbs).

$S0 250;

// Mean of lobster price distribution ($3.50 per lb)

$lobster_price_mean 3.50;

// Standard devation of price distribution (25 cents).

$lobster_price_stdev 0.25;

/*** PARAMETER SETTINGS FOR REVENUE MODEL - END ***/

// Specify normal distribution parameters for first catch of the season.

$lobster_catch_distribution  = new NormalDistribution($N0$S0);

// Specify normal distribution parameters for prices for the season.

$lobster_price_distribution  = new NormalDistribution($lobster_price_mean$lobster_price_stdev);

?>
<table border='1'>
  <thead>
  <tr>
    <th>Catch #</th>
    <th>Price/LB</th>
    <th>Weight(LB)</th>
    <th>Revenue</th>
  </tr>
  </thead>
  <tbody>
  <?php
  
// Generate values for first catch of the season.
  
$lobster_catch[0]   = round($lobster_catch_distribution->RNG());
  
$lobster_price[0]   = sprintf("%01.2f",$lobster_price_distribution->RNG());
  
$lobster_revenue[0] = sprintf("%01.2f",$lobster_catch[0] * $lobster_price[0]); 
  
?>
  <tr>
    <td align='center'><?php echo 1 ?></td>
    <td align='center'>$<?php echo $lobster_price[0?></td>
    <td align='center'><?php echo $lobster_catch[0?></td>
    <td align='center'>$<?php echo $lobster_revenue[0?></td>
  </tr>  
  <?php
  
for ($c=1$c<$num_catches$c++) {
    
    
// Reduce the mean catch size after the first catch
    // according to exponential decay function.
    
$N $N0 exp($k $c);

    
// Reduce the standard deviation of catch size after the 
    // first catch according to exponential decay function.
    
$S $S0 exp($k $c);  
    
    
// Specify new catch size distribution for this trip.
    
$lobster_catch_distribution  = new NormalDistribution($N$S);
    
    
// Call random number generator RNG to sample values from 
    // catch size and catch price distribution.
    
$lobster_catch[$c]   = round($lobster_catch_distribution->RNG());
    
$lobster_price[$c]   = sprintf("%01.2f",$lobster_price_distribution->RNG());
    
$lobster_revenue[$c] = sprintf("%01.2f",$lobster_catch[$c] * $lobster_price[$c]);  
    
?>
    <tr>
      <td align='center'><?php echo ($c+1?></td>
      <td align='center'>$<?php echo $lobster_price[$c?></td>
      <td align='center'><?php echo $lobster_catch[$c?></td>
      <td align='center'>$<?php echo $lobster_revenue[$c?></td>
    </tr>            
    <?php
  
}
  
?>
  <tr>
    <td>&nbsp;</td>
    <th>Totals</th>
    <td align='center'><?php echo array_sum($lobster_catch?></td>    
    <td align='center'>$<?php echo array_sum($lobster_revenue?></td>
  </tbody>
</table>

What is critical to note in this code is that we set the parameters of our $lobster_catch_distribution multiple times according to our exponential decay function for the mean catch size and the standard deviation of the catch size. In general, a non-stationary process involves re-setting parameters inside the loop that generates revenue for each time unit in your model. In contrast, the parameters for the $lobster_price_distribution is only set once outside the loop and remains constant for each time unit of the model. This structure will be common to all revenue models that consist of stationary or non-stationary factors that determine revenue.

This is what the output of our new lobster fishing revenue model looks like.

Catch # Price/LB Weight(LB) Revenue
1 $3.57 629 $2245.53
2 $3.67 853 $3130.51
3 $3.67 1065 $3908.55
4 $3.33 819 $2727.27
5 $3.50 848 $2968.00
6 $3.49 1075 $3751.75
7 $3.72 1038 $3861.36
8 $3.75 933 $3498.75
9 $3.57 756 $2698.92
10 $3.58 731 $2616.98
11 $3.54 610 $2159.40
12 $3.29 822 $2704.38
13 $3.56 757 $2694.92
14 $3.31 501 $1658.31
15 $3.59 644 $2311.96
16 $3.35 649 $2174.15
17 $3.34 718 $2398.12
18 $3.61 415 $1498.15
19 $3.22 842 $2711.24
20 $3.28 626 $2053.28
21 $3.49 464 $1619.36
22 $3.48 588 $2046.24
23 $3.37 234 $788.58
24 $3.42 530 $1812.60
25 $3.88 256 $993.28
26 $3.05 321 $979.05
27 $3.43 575 $1972.25
28 $3.37 420 $1415.40
29 $3.23 554 $1789.42
30 $3.35 420 $1407.00
31 $3.55 498 $1767.90
32 $3.63 305 $1107.15
33 $3.44 407 $1400.08
34 $3.24 335 $1085.40
35 $3.00 455 $1365.00
36 $3.53 359 $1267.27
37 $3.79 242 $917.18
38 $3.31 177 $585.87
39 $3.43 440 $1509.20
40 $3.74 293 $1095.82
  Totals 23204 $80695.58

What you should note about this output is how the revenue is greater at the beginning of the season than towards the end of the season. This gives us a better sense of what type of cashflow to expect over the season. It conforms better to the day-to-day revenue expectations a fisherman has over the course of a lobster fishing season.

Conclusion

In this blog I've illustrated how stationary and non-stationary factors are included in a revenue model. Although I am focusing on a lobster fishing example, the programmatic lessons about how to incorporate stationary and non-stationary factors into a revenue model is more general and you can use this model as a template for constructing a revenue model for your own line-of-business. When specifying the non-stationary component of your revenue model you have many choices as to what function might be used to determine the parameter settings for probability distribution representing that component. I used an exponential function but there are a large number of other possible functions you might use. One common function would be a sine wave function if your revenue model has a seasonal component. Gompertz functions are often used in situations where the sales are brisk at first then die off rapidly thereafter, such as happens when a new movie is released. Piecewise linear functions are also very useful and flexible.

I'm not quite done with revenue modelling as there is one more aspect that I want to add to the lobster-fishing model make it more realistic. Stay tuned for my next blog to find out what else we might do to make our revenue models more realistic.

Permalink 

Stationary and Non-Stationary Revenue Models [Business Models
Posted on June 26, 2013 @ 12:31:00 PM by Paul Meagher

In my last blog I proposed a simple revenue model for lobster fishing. In today's blog I want to refine that model to make it more realistic. The particular refinement that I want to make to the model today involves taking into account the fact that lobster catches tend to decline over the course of a lobster fishing season. The number of lobsters available to catch declines after each catch because you are extracting lobsters from the grounds and are they are not being replaced with new lobsters at a rate that equals the extraction rate. That means you have less lobsters to catch after each running of the lobster traps.

Our simple revenue model for lobster fishing assumed that the size of the catch stayed the same from the beginning of the season to the end of the season. I selected a catch size that was somewhere between the largest and smallest expected catch sizes in order to wash out these differences, however, it would be better if I acknowledged that the catch size distribution I was sampling from was not "stationary" over the course of the fishing season, but rather is "non-stationary", with the mean catch size decreasing over the course of the lobster fishing season. By acknowledging the non-stationary nature of the lobster biomass over the course of a fishing season, we can better estimate what lobster fishing revenue looks like over the course of a season instead of assuming that it is roughly constant around a single mean with some variation due to chance factors.

In general, when you are modelling revenue you need to think deeply about whether the revenue generating process is stationary over time or is non-stationary. When selling gardening supplies, for example, we might expect there to be minor sales outside of the growing season with sales picking up at the beginning of the growing season and then tapering off towards the end. Your revenue model for garden supply sales might be best captured by factors in your revenue modelling equations that takes into account the seasonal and bursty nature of such sales.

In the case of lobster fishing we will attempt to capture the non-stationary nature of the catch size distribution (and therefore the revenue distribution) by assuming that the availability of lobsters to catch decays in an exponential manner. Exponential decay of lobster catch size means that there is a percentage decrease in available lobsters after each catch which will lead to lower mean catch sizes as the season progresses.

Exponential Decay Formula

The exponential decay/growth formula looks like this:

N = N0 * e k*t

The symbols in the equation have the following meaning:

N is the amount of some quantity at time t.

N0 is the initial amount of some quantity at time 0.

e is the natural exponent which is roughly equal to 2.71.

t is the amount of time elapsed.

k is the decay factor or percentage decrease per unit of time.

To use this formula in the context of my lobster fishing revenue model I need to figure out what values to plug into this equation. What I have to work with is some estimates of what the lobster catch will be at the beginning of the season (1000 lbs), what it might be at the end of the season (300 lbs), and how many trips in the boat they will make to the lobster fishing grounds during the lobster fishing season (40 trips - Note: the number of trips will be the t value in our exponential formula). Given these values, we can figure out what the decay rate should be so that we begin the season with a catch of 1000 lbs and end the season with a catch of 300 lbs and we do this over 40 fishing trips.

So here is the exponential growth/decay formula (depending on the sign of the k term):

N = N0 * e k*t

Now substitute in our values:

300 = 1000 * e k*(39)

I use 39 for the value of t rather than 40 because there is no decay in lobster catch size for the first trip. The decay only kicks in on the subsequent 39 trips. The math works out correctly this way as you will see later.

To solve for k, we need to rearrange some terms:

300/1000 = ek*(39)

Applying the natural logarithm function, ln(), to both sides allows us to get rid of the natural exponent e as follows:

ln(300/1000) = ln(ek*(39))

Which evaluates to:

-1.20397 = k * 39

The solution looks like this:

-1.20397/39 = k

Doing the division, we are left with:

k = -0.03087

So the exponential decay formula for the mean catch size looks like this:

N = 1000 * e -0.03087 * t

Where t is the trip number which varies between 1 (for the second trip of the season) and 39 (for the 40th trip of the season).

Testing The Formula

To test his formula we can plug in the relevant values and verify that in our last catch of the season our expected catch would be 300 lbs. The PHP program below verifies that this is the case.

<?php

// We want a starting catch of 1000 lbs and a final catch 
// of 300 lbs after 40 fishing trips.  Formula below gives 
// us that.

// Subtract 1 from 40 fishing trips because the first 
// trip starts at 1000 lbs and is reduced thereafter 
// according to the exponential decay formula below.

$t  39;
$k  =  -0.03087;
$N0 1000;
$N $N0 exp($k $t); 

echo 
$N;

// Answer: 300.01284157262
?>

The output of the script tells us that on the final trip we expect to catch 300 lbs of lobster which is how we want our decay function to work.

The mean catch size is not the only parameter that we might expect to vary through the lobster fishing season; we might also expect that the standard deviation in catch sizes would also decrease along with the smaller catch sizes. A simple and reasonable approach to decreasing the expected standard deviation in catch sizes would involve decreasing the standard deviation over catches/trips using the same exponential decay formula but using the initial standard deviation (250) as the N0 initial value in a similar exponential decay equation (i.e., N = 250 * e -0.03087 * t).

The script below is used to verify that our expected catch sizes and expected standard devation in catch sizes start and end at appropriate values.

<?php

// We want a starting catch of 1000 lbs and a final catch 
// of 300 lbs.  We want the mean catch size and standard
// deviation in catch sizes reduced by a factor of 
// $k = -0.03087 after each trip.  The loop below shows 
// how this is done by applying the exponential decay function 
// for mean catch size ($N) and the standard devation 
// of catch sizes ($S).

$t  39;
$k  = -0.03087;
$N0 1000;
$S0 250;

echo 
"Catch # 1: mean=$N0, stdev=$S0 <br />"

for(
$c=1$c <= $t$c++) {
  
$N $N0 exp($k $c);
  
$S $S0 exp($k $c);  
  echo 
"Catch # ".($c+1).": mean=".round($N).", stdev=".round($S)."<br />"
}

/* 

Output of script looks like this:

Catch # 1: mean=1000, stdev=250
Catch # 2: mean=970, stdev=242
Catch # 3: mean=940, stdev=235
Catch # 4: mean=912, stdev=228
Catch # 5: mean=884, stdev=221

.... SNIP ....

Catch # 35: mean=350, stdev=88
Catch # 36: mean=339, stdev=85
Catch # 37: mean=329, stdev=82
Catch # 38: mean=319, stdev=80
Catch # 39: mean=309, stdev=77
Catch # 40: mean=300, stdev=75

*/
?>

Conclusion

So what we have done in today's blog is to come up with an exponential decay formula that we will be using to define the mean and standard deviation values that we will plug into our catch size distribution function which we assume to be normally distributed. For our lobster fishing revenue model to become more realistic we have to acknowledge that the revenue obtained from lobster fishing is non-stationary through the season, in particular, that we generate less income each time we go out fishing because the available stock of lobsters is reduced after each catch. We can model this decreased revenue by sampling from a catch size distribution that has a smaller mean and standard deviation after each trip. In my next blog I will show you how the PHP routine above can be incorporated into our lobster fishing revenue model to provide us with a more realistic revenue model, one that might provide us with more realistic expectations regarding cash flow through the season.

As a final note, the lobster fishing season this year is quite unusual as catches are larger than normal and they are still getting good catches towards the end of the season (800 lbs on their last trip). The revenue model ignores certain unusual aspects of this season which might make it a better revenue model for predicting lobster fishing revenue next season. The model does not attempt to overfit the data from this season because the numbers are quite unusual (they might, however, reflect the effect of better conservation measures which might persist in their effects). Predictive revenue modelling can be more of an art than a science as it involves judgement calls regarding what is signal and what is noise.

Permalink 

Revenue Modelling [Business Models
Posted on June 25, 2013 @ 06:41:00 AM by Paul Meagher

In a previous blog on profit distributions, I suggested that we could forecast profit distributions for a line-of-business rather than make point estimates of how much the line-of-business might make over a specified period of time. A forecasted profit distribution can be viewed as arising from probabilistic factors that jointly produce the range of possible profit outcomes.

In order to compute profits, we need to estimate the revenue term in the profit equation (profits = revenue - costs). In today's blog, I want to focus on revenue modelling because it can provide insight into how our profit distribution forecasts might arise and also because revenue modelling is a useful and interesting intellectual exercise.

To make a revenue model for a line-of-business that can be used to account for some of the variability in a profit distribution, we need to specify the primary factors that generate revenue and how they might interact to produce the expected range of possible revenue outcomes. We can go into more or less detail on what these primary factors are and how they interact, but initially we should be content to deal with just two or three factors until we master that level of model complexity.

Lobster Fishing Revenue Model

To illustrate what a revenue model for a line-of-business might look like, I will take the example of lobster fishing which I am somewhat familiar with because my in-laws are fisherman (they fish lobster and crabs and grow oysters). I will construct a revenue model that might account for this season's revenue from the lobster fishing line-of-business.

A season of lobster fishing has a start date and an end date, in this case from May 1 to June 30, 2013. Between these dates, fishermen can set traps for lobsters and keep those that fall within conservation guidelines. The lobsters are not fished every day; usually you leave the traps for a day and come back the second day to harvest your traps (fyi, they harvest their crab traps on off days until they complete their crab quota). The harvest you obtain from your traps is called your "catch" and the season can be viewed as consisting of the number and sizes of catches you made over the season, and the prices you obtained for your various catches. So the two primary factors we will use to characterize a catch is the size of the catch in pounds (lbs) and the price per lb that was received for that catch. We can compute the revenue for a season of fishing by adding up the revenue per catch for all their catches in that season.

What I want to do in this week's blogging is construct a simple probabilistic revenue model for lobster fishing and then explore a set of refinements I might make in order to make it a more realistic revenue model. This might inspire in you to construct a simple revenue model for your own line-of-business and to consider what additional factors you might want to take into account to make it more realistic.

Revenue Model Implementation

You can implement a revenue model using whatever programming language you are comfortable with. In the example below I use PHP because I have developed a Probability Distributions Library (https://github.com/mrdealflow/PDL) that I find useful for injecting uncertainty into the model. I inject uncertainty by assuming that the catch size is normally distributed with a mean catch size of 500 lbs and a standard deviation of 150 lbs. This means that as my program iterates through all the catches it generates a possible catch size by sampling from a normal distribution of values with a mean of 500 lbs and a standard deviation of 150 lbs. This results in catch sizes that vary quite a bit from catch to catch. I also inject uncertainty into the revenue model by assuming that the price per lb for live lobster is $3.50 per lbs with a standard deviation of 25 cents from catch to catch. So as we iterate through each catch we sample from a catch size distribution and a price per lb distribution and multiply the sampled values together to compute the revenue generated for that catch. The revenue generated for each catch is primarily a function of the catch size random variable and the price per lb random variable. Here is what the model looks like:

<?php

// @script: lobster_revenue.php
// @author: Paul Meagher
// @modified: June 25/2013

// The probability distributions library sits 
// in the PDL folder at the same level as the 
// folder the script is run from.
//
// @see https://github.com/mrdealflow/PDL

require_once '../PDL/NormalDistribution.php';

// Set the number of catches per season.

$num_catches 28;

// Assume the catch size is 500 lbs per catch with standard 
// deviation of 150 per catch

$lobster_catch_distribution  = new NormalDistribution(500150);

// Assume the price per lb is 3.50 with a standard deviation of 
// 25 cents.

$lobster_price_distribution  = new NormalDistribution(3.50.25);

?>
<table border='1'>
  <thead>
  <tr>
    <th>Catch #</th>
    <th>Price/LB</th>
    <th>Weight(LB)</th>
    <th>Revenue</th>
  </tr>
  </thead>
  <tbody>
  <?php
  
for ($i=0$i<$num_catches$i++) {
    
// Call random number generator RNG to sample a value from the distribution.
    
$lobster_catch[$i]   = round($lobster_catch_distribution->RNG());
    
$lobster_price[$i]   = sprintf("%01.2f",$lobster_price_distribution->RNG());
    
$lobster_revenue[$i] = sprintf("%01.2f",$lobster_catch[$i] * $lobster_price[$i]);  
    
?>
    <tr>
      <td align='center'><?php echo ($i+1?></td>
      <td align='center'>$<?php echo $lobster_price[$i?></td>
      <td align='center'><?php echo $lobster_catch[$i?></td>
      <td align='center'>$<?php echo $lobster_revenue[$i?></td>
    </tr>            
    <?php
  
}
  
?>
  <tr>
    <td>&nbsp;</td>
    <th>Totals</th>
    <td align='center'><?php echo array_sum($lobster_catch?></td>    
    <td align='center'>$<?php echo array_sum($lobster_revenue?></td>
  </tbody>
</table>

And here is the output that the lobster_fishing.php revenue model generates:

Catch # Price/LB Weight(LB) Revenue
1 $3.92 667 $2614.64
2 $3.58 566 $2026.28
3 $3.34 511 $1706.74
4 $3.75 620 $2325.00
5 $3.68 441 $1622.88
6 $3.10 439 $1360.90
7 $3.15 508 $1600.20
8 $3.62 476 $1723.12
9 $3.47 441 $1530.27
10 $3.64 503 $1830.92
11 $3.58 145 $519.10
12 $3.25 423 $1374.75
13 $3.29 825 $2714.25
14 $3.23 520 $1679.60
15 $3.40 340 $1156.00
16 $3.96 284 $1124.64
17 $3.16 454 $1434.64
18 $3.17 541 $1714.97
19 $3.47 668 $2317.96
20 $3.51 469 $1646.19
21 $3.72 367 $1365.24
22 $3.74 580 $2169.20
23 $3.49 579 $2020.71
24 $3.72 488 $1815.36
25 $3.41 691 $2356.31
26 $3.36 450 $1512.00
27 $3.71 617 $2289.07
28 $3.75 646 $2422.50
  Totals 14259 $49973.44

Some Refinements

In my next two blogs I'll be exploring a couple of refinements to this revenue model that are designed to make the revenue model more realistic and also to give you more modelling ideas you might use to construct more realistic revenue models for your own lines-of-business.

Permalink 

Seven internet business models [Business Models
Posted on February 21, 2013 @ 11:32:00 AM by Paul Meagher

I am making my way through the book Simply Seven, which claims that there are only 7 types of internet business models - hence the name.

I encourage you to visit the Simply Seven website to learn more about the seven internet business models they discuss:

  1. Service Sales
  2. Subscriptions
  3. Retail
  4. Commissions
  5. Advertising
  6. License Sales
  7. Financial Risk

In my opinion, the main reason why this is a useful book to read has to do with their comparative analysis of the relative strengths and weaknesses of each business model. They discuss what makes each business model work well and what factors inhibit it or make it fail. They discuss which business models tend to be more profitable. They also do case studies for each business model showcasing a company that is an internet leader in exploiting the business model. They also discuss companies that have fallen from grace trying to exploit the same business model (e.g., AOL and subscriptions).

You can read some of the reviews on this book and in general they tend to be fairly positive. The website for the book has a weblog that was more active during the writing of the book and which covers some of the same ground as the book so you can get a feel for the books content by reading some of their blog postings.

Factoid from book: Skype was turned down by 13 investor groups before they found an investor. This was in part due to the fact that they originally developed the peer-to-peer file sharing service Kazaa that ran into legal difficulties. The Angel Investor who first invested in the company recognized the advantage of peer-to-peer technology in scaling phone services relative to other approaches to providing phone services. Skype is now the largest phone company in the world.

Permalink 

New avenues in business modelling [Business Models
Posted on February 18, 2013 @ 08:18:00 AM by Paul Meagher

On friday of last week, I thought I had posted my last blog on business modelling (A complete and profitable business model). I thought that I had a nice simple story all tied up in a bow. Further reflection, however, has suggested several new avenues to be explored.

One missing piece is the front end to the business model. How does a user interact with a business model in order to specify the parameters and parse the reports. To take this work any further requires that some front end work be done.

Another missing piece is the ability to select the type of business model that would be more appropriate to your business. So far, the business models I have posted have been for a Software as a Service (SaaS) type business model. There are other industries that adopt similiar billing practices so the monthly service fee business model has more generality than just a Software as a Service (SaaS) business model.

Nevertheless, there are business models that depend upon selling x number of product units a month in order to be profitable. The sale of these units is a one time event as far as the model is concerned. There is no carry-on source of revenue from the sale. Consequently, a products-based business model depends upon selling a larger number of units or a few units at a larger cost. The number of units should increase over time if the model is to be profitable or a growth-based business model.

Farm-based business models represent another potential twist in how business models are setup. One way in which a farm audits its operations is in terms of the amount of money that goes into an acre of land and how much money that acre makes in return. The state of California, for example, has recently released a manual called Organic Strawberry Production Manual for those wanting to get into the industry. The book includes an chapter in which the authors calculate the input costs, labor, rents, and income on a per-acre basis. They estimated the income per acre to be $41,250, the total costs per acre to be $26,342, and the net returns above operating costs (profit) to be $14,908. Given these figures, one could begin the process of developing a business model for Organic Stawberry Production. Keep in mind, however, that the estimated costs, revenues, and profits very much depend upon the particulars of the farmland, climate, markets, input and labor costs.

Organic Strawberry Production Manual

So stay tuned for another exiting week of experiments and ideas related to business models.

Permalink 

A complete and profitable business model [Business Models
Posted on February 15, 2013 @ 09:48:00 AM by Paul Meagher

In a previous blog, entitled including uncertainty in your business model, I laid the groundwork as to how I proposed to integrate uncertainly into a business model. I proposed changing the $num_new_customers_per_month setting in the business model implementation from a fixed value (e.g., $num_customers_per_month=10) to a new customer distribution setting that could vary and grow as the years go by in your business model.

We can store yearly settings for the "new customer distribution" in the following data structure:

$ave_customers_per_month[1] = array(10, 5);
$ave_customers_per_month[2] = array(15, 5);
$ave_customers_per_month[3] = array(20, 5);
$ave_customers_per_month[4] = array(25, 5);

The way to parse this is that in the first year of the model the mean of the new customer distribution is 10 and the standard deviation is 5 (mu=10, sigma=5). In the second year of the model, the mean will increase by 5 to 15, but the standard deviation will remain the same at 5 (mu=15, sigma=5). An so on, for each year that the model projects to.

In order to utilize these settings, I decided I would integrate the PHP-based Probability Distributions Library, or PDL, that provides implementations of the major probability distributions. In this case, I needed the normal distibution and included it like so:

require_once '../PDL/NormalDistribution.php';

Then, before I started looping through each month in a particular year of the model, I initalized the new customer distribution like so (mean and standard deviation values are being passed into the NormalDistribution constructor call):

$new_customer_distribution  = new NormalDistribution($ave_customers_per_month[$y][0], $ave_customers_per_month[$y][1]);

Finally, as each month passes in the business model, I generate a random number from the $new_customer_distribution and assign it to $num_customers_per_month.

$num_customers_per_month = round($new_customer_distribution->RNG());

Voilà, what used to be a fixed value on our business model (i.e, $num_customers_per_month=10), is now a quantity that varies each month according to the new customer distribution being sampled from for that year.

It is in this manner that the business model incorporates uncertainty. Other variables in the model could also be turned into random variables instead of fixed quantities if you felt it was important to add additional uncertainty to your business model.

Business Model Output

This business model output will differ from other model output that I displayed in previous blogs in two major ways.

First, you will see that the number of customers per month grows in an irregular manner. In the first year you might add 8 new customers one month, and 12 new customers the next month. If you refresh the page that displays this report, a new set of overall estimates of costs, reveneues, and profits will appear due to the uncertaintly/randomness we have introduced. Indeed, it is critical that you do refresh the model many times to get a sense of the range of variability you might get out of your business model. Look in particular at the variability in the overall estimates of costs, revenues, and profits. A business model with uncertainty has the benefit that instead of generating only point estimates of your yearly costs, revenues, and profits, you can re-run your model to generate range estimates of your yearly costs, revenues, and profits.

The second difference you will see in this model output is that the business model is profitable for the investor. To date, the investor did not recoup their investment of $50,000 after 3 years by offering 20 percent of the profits. In order for the investor to recoup their investment in a 3 year time frame, I steadily increase the expected number of customers per month for each year in the model from 10 to 25. I also offered the investor 50 percent of the ongoing profits. After three years, the investor makes $31,790.00 or a 64% return on investment (keep in mind that this return will change as you refresh the business model).

Without further ado, here is the business model output:

YearMonth# Customers RevenuesCostsProfits Company ProfitsInvestor Profits
2013 2 12 $360.00 $1,120.00 -$760.00 -$760.00 $0.00
2013 3 28 $840.00 $1,280.00 -$440.00 -$440.00 $0.00
2013 4 46 $1,380.00 $1,460.00 -$80.00 -$80.00 $0.00
2013 5 61 $1,830.00 $1,610.00 $220.00 $110.00 $110.00
2013 6 66 $1,980.00 $1,660.00 $320.00 $160.00 $160.00
2013 7 80 $2,400.00 $1,800.00 $600.00 $300.00 $300.00
2013 8 88 $2,640.00 $1,880.00 $760.00 $380.00 $380.00
2013 9 102 $3,060.00 $2,020.00 $1,040.00 $520.00 $520.00
2013 10 115 $3,450.00 $2,150.00 $1,300.00 $650.00 $650.00
2013 11 127 $3,810.00 $2,270.00 $1,540.00 $770.00 $770.00
2013 12 137 $4,110.00 $2,370.00 $1,740.00 $870.00 $870.00
2013 Totals $25,860.00 $19,620.00 $6,240.00 $2,480.00 $3,760.00
2014 1 142 $4,260.00 $2,420.00 $1,840.00 $920.00 $920.00
2014 2 155 $4,650.00 $2,550.00 $2,100.00 $1,050.00 $1,050.00
2014 3 164 $4,920.00 $2,640.00 $2,280.00 $1,140.00 $1,140.00
2014 4 177 $5,310.00 $2,770.00 $2,540.00 $1,270.00 $1,270.00
2014 5 187 $5,610.00 $2,870.00 $2,740.00 $1,370.00 $1,370.00
2014 6 208 $6,240.00 $3,080.00 $3,160.00 $1,580.00 $1,580.00
2014 7 230 $6,900.00 $3,300.00 $3,600.00 $1,800.00 $1,800.00
2014 8 251 $7,530.00 $3,510.00 $4,020.00 $2,010.00 $2,010.00
2014 9 267 $8,010.00 $3,670.00 $4,340.00 $2,170.00 $2,170.00
2014 10 282 $8,460.00 $3,820.00 $4,640.00 $2,320.00 $2,320.00
2014 11 289 $8,670.00 $3,890.00 $4,780.00 $2,390.00 $2,390.00
2014 12 310 $9,300.00 $4,100.00 $5,200.00 $2,600.00 $2,600.00
2014 Totals $79,860.00 $38,620.00 $41,240.00 $20,620.00 $20,620.00
2015 1 333 $9,990.00 $4,330.00 $5,660.00 $2,830.00 $2,830.00
2015 2 350 $10,500.00 $4,500.00 $6,000.00 $3,000.00 $3,000.00
2015 3 367 $11,010.00 $4,670.00 $6,340.00 $3,170.00 $3,170.00
2015 4 391 $11,730.00 $4,910.00 $6,820.00 $3,410.00 $3,410.00
2015 5 412 $12,360.00 $5,120.00 $7,240.00 $3,620.00 $3,620.00
2015 6 428 $12,840.00 $5,280.00 $7,560.00 $3,780.00 $3,780.00
2015 7 441 $13,230.00 $5,410.00 $7,820.00 $3,910.00 $3,910.00
2015 8 468 $14,040.00 $5,680.00 $8,360.00 $4,180.00 $4,180.00
2015 9 487 $14,610.00 $5,870.00 $8,740.00 $4,370.00 $4,370.00
2015 10 511 $15,330.00 $6,110.00 $9,220.00 $4,610.00 $4,610.00
2015 11 535 $16,050.00 $6,350.00 $9,700.00 $4,850.00 $4,850.00
2015 12 548 $16,440.00 $6,480.00 $9,960.00 $4,980.00 $4,980.00
2015 Totals $158,130.00 $64,710.00 $93,420.00 $46,710.00 $46,710.00
2016 1 574 $17,220.00 $6,740.00 $10,480.00 $5,240.00 $5,240.00
2016 2 596 $17,880.00 $6,960.00 $10,920.00 $5,460.00 $5,460.00
2016 Totals $35,100.00 $13,700.00 $21,400.00 $10,700.00 $10,700.00
Overall Totals $298,950.00 $136,650.00 $162,300.00 $80,510.00 $81,790.00

The investor has recouped their $50,000.00 investment. The investor has earned $31,790.00 in profits so far.

GitHub

If you want to run the latest business model which includes uncertainty, it will require a bit more setup work to get it to run. You need to download the Probability Distributions Library because the newest business model depends on that library now. I'm currently working on getting my https://github.com/mrdealflow Github account setup as a place where I can share code more easily and others can contribute.

I will let you know in a blog next week when everything is ready to go. Until then, here is the code for a business model that now includes uncertainty and a profitable outcome for an investor.

<?php
/**
* Prototypical business model involving the generation of monthly
* revenue based upon the number of existing customers plus new
* customers per month with each customer paying a monthly fixed fee.
* Costs based upon monthly fee for servicing "rents" and a cost per
* customer (variable cost) for providing the service to the customer.
*
* The involvement of an investor is assumed in this model.  The
* investor is represented with two variables.  An "investment size"
* variable and an "investor profit percentage" variable.  

* Uncertaintyin the number of new customers per month is also 
* incorporated in this business model.
*
* @script: monthly_growth_with_uncertaintly.php
* @author: Paul Meagher
* @company: Dealflow Solutions Ltd.
* @url: http://www.planetdealflow.ca
* @version: 0.3
* @modified: Feb 15, 2013
*
* Changelog:
*  + feb 11, 2013 - released
*  + feb 14, 2013 - add money_format.php fallback
*  + feb 14, 2013 - add uncertainty to nun new customers per month
*/

// get rid of inclusion warning
error_reporting(0);

// Not all PHP setups implement the money_format function.  Current version
// of wampserver does not (www.wampserver.com) so must include a php
// implementaiton of this function
if (!function_exists('money_format'))
  include_once 
"utils/money_format.php";

require_once 
'../PDL/NormalDistribution.php';

// PART 1: CHANGE THESE SETTINGS

// Set number of years for your projections.
$num_years 3;

// Replace fixed variable
// $num_new_customers_per_month = 10;

// With distibution settings per year
$ave_customers_per_month[1] = array(105);
$ave_customers_per_month[2] = array(155);
$ave_customers_per_month[3] = array(205);
$ave_customers_per_month[4] = array(255);

$monthly_fee_per_customer   30;
$monthly_cost_per_customer  10;

// Cost of "rents" per month.
$fixed_cost_per_month 1000;

// Starting number of customers customers - default 0.
$num_customers 0;

// New variables added to model investor involvement
$investment_size 50000;
$investor_profit_percentage .50;

// Set money formatting according to a locale setting.
setlocale(LC_MONETARY'en_CA');

// Starting month - defaults to current month.
$start_month date("n");

// PART 2: DO NOT CHANGE THESE INITIALIZATION SETTINGS

// setup year number to year date mapping for reporting purposes
$year_num_to_year_date[1] = $next_year date("Y");
for(
$n 2$n <= $num_years+1$n++) {
  
$next_year $next_year 1;
  
$year_num_to_year_date[$n] = $next_year;
}

// Zero the parameters we will be estimating
$costs    = array();
$revenues = array();
$profits  = array();
$company_profits  = array();
$investor_profits = array();

// Zero the accumulator variables
$total_profits 0;
$total_costs 0;
$total_revenues 0;
$total_company_profits 0;
$total_investor_profits 0;

// PART C: GENERATE REPORT PROVIDING ESTIMATES OF COST, REVENUES, & PROFITS

?>

<table border='1' cellpadding='5' cellspacing='0'>
  <thead>
    <tr>
      <th>Year</th><th>Month</th><th># Customers</th>
      <th>Revenues</th><th>Costs</th><th>Profits</th>
      <th>Company Profits</th><th>Investor Profits</th>
    </tr>
  </thead>
  <tbody>
  <?php
  
if ($start_month == 1)
    
$y_end $num_years;
  else
    
$y_end $num_years 1;

  for(
$y=1$y<=$y_end$y++) {

    if (
$y == 1)
      
$m $start_month;
    else
      
$m 1;

    
$new_customer_distribution  = new NormalDistribution($ave_customers_per_month[$y][0], $ave_customers_per_month[$y][1]);

    for (
$m$m<=12$m++) {

      
$num_customers_per_month round($new_customer_distribution->RNG());

      
$num_customers $num_customers $num_customers_per_month;

      
$year_date $year_num_to_year_date[$y];

      if ((
$y == $y_end) AND ($m == ($start_month+1)))
        break;
      else {
        
// The data structures don't have to be this complicated but they can 
        // be used in downstream calculatios more easily in this format.
        
$costs[$year_date][$m]    = ($num_customers $monthly_cost_per_customer) + $fixed_cost_per_month;
        
$revenues[$year_date][$m] = $num_customers $monthly_fee_per_customer;
        
$profits[$year_date][$m]  = $revenues[$year_date][$m] - $costs[$year_date][$m];

        
// Allocate perentages of the profit to the investor or the company
        // when profits are negative investor makes 0 and company takes
        // the loss.  Could also allow both parties to assume the loss.
        
if ($profits[$year_date][$m] < 0) {
          
$investor_profits[$year_date][$m] = 0;
          
$company_profits[$year_date][$m] = $profits[$year_date][$m];
        } else {
          
$investor_profits[$year_date][$m] = $profits[$year_date][$m] * $investor_profit_percentage;
          
$company_profits[$year_date][$m] = $profits[$year_date][$m] * (1-$investor_profit_percentage);
        }

      }
      
?>
      <tr>
       <td><?php echo $year_date ?></td>
       <td align='center'><?php echo $m ?></td>
       <td align='center'><?php echo $num_customers ?></td>
       <td align='right'><?php echo money_format('%n'$revenues[$year_date][$m]) ?></td>
       <td align='right'><?php echo money_format('%n'$costs[$year_date][$m]) ?></td>
       <td align='right'><?php echo money_format('%n'$profits[$year_date][$m]) ?></td>
       <td align='right'><?php echo money_format('%n'$company_profits[$year_date][$m]) ?></td>
       <td align='right'><?php echo money_format('%n'$investor_profits[$year_date][$m]) ?></td>
      </tr>
      <?php
    
}
    
$profits[$year_date]['total']          = array_sum($profits[$year_date]);
    
$costs[$year_date]['total']            = array_sum($costs[$year_date]);
    
$revenues[$year_date]['total']         = array_sum($revenues[$year_date]);
    
$company_profits[$year_date]['total']  = array_sum($company_profits[$year_date]);
    
$investor_profits[$year_date]['total'] = array_sum($investor_profits[$year_date]);

    
$total_profits +=  $profits[$year_date]['total'];
    
$total_costs += $costs[$year_date]['total'];
    
$total_revenues +=  $revenues[$year_date]['total'];
    
$total_company_profits += $company_profits[$year_date]['total'];
    
$total_investor_profits += $investor_profits[$year_date]['total'];
    
?>
    <tr>
      <th colspan='3' align='right'><?php echo $year_date." Totals"?></th>
      <td align='right'><?php echo money_format('%n'$revenues[$year_date]['total']); ?></td>
      <td align='right'><?php echo money_format('%n'$costs[$year_date]['total']); ?></td>
      <td align='right'><?php echo money_format('%n'$profits[$year_date]['total']); ?></td>
      <td align='right'><?php echo money_format('%n'$company_profits[$year_date]['total']); ?></td>
      <td align='right'><?php echo money_format('%n'$investor_profits[$year_date]['total']); ?></td>
    </tr>
    <?php
  
}
  
?>
  <tr>
    <th colspan='3' align='right'><?php echo "Overall Totals"?></th>
    <td align='right'><?php echo money_format('%n'$total_revenues); ?></td>
    <td align='right'><?php echo money_format('%n'$total_costs); ?></td>
    <td align='right'><?php echo money_format('%n'$total_profits); ?></td>
    <td align='right'><?php echo money_format('%n'$total_company_profits); ?></td>
    <td align='right'><?php echo money_format('%n'$total_investor_profits); ?></td>
  </tr>
  </tbody>
</table>

<?php
$amount_owing 
$investment_size $total_investor_profits;
if (
$amount_owing 0) {
  
?>
  <p>
  <b>The investor has not recouped their <?php echo money_format('%n'$investment_size?>
  investment yet.  You still owe the investor <?php echo money_format('%n'$amount_owing?>.</b>
  </p>
  <?php
} else {
  
$profit_earned $amount_owing * -1;
  
?>
  <p>
  <b>The investor has recouped their <?php echo money_format('%n'$investment_size?> investment.
  The investor has earned <?php echo money_format('%n'$profit_earned?> in profits so far.</b>
  </p>
  <?php
}
?>

Permalink 

Year of the hustle [Business Models
Posted on February 14, 2013 @ 09:34:00 AM by Paul Meagher

Amy Hoy has been making a name for herself of late based upon a successful workshop she runs called the 30x500 Workshop.

It is a workshop aimed at software developers in which she explains how to make money by selling software as a service (SaaS Business Model). If you charge consumers a monthly fee of $30 and you add a regular number of new customers each month, you could be generating this type of income:


Source: Amy Hoy - http://unicornfree.com/30x500.

Does this business model look familiar? It looks very much like the linear growth business model (or one with low curvature) I have been discussing in my last several posts. The parameters of the business model overlap as well - for example, I also configured the monthly customer fee to be $30 a month. I may have even been inspired by this article to blog on the topic of implementing business models as PHP programs.

Whatever the case, there are two aspects to a $30 (monthly fee per customer) x 500 (number of customers) business model that are not discussed in the marketing material for the workshop. The business model does not discuss costs. What are the fixed monthly costs, the "rents", for opearating the business. Second, what is the cost per customer of providing the service. If you have to purchase more server capacity and pay off more suppliers, then your cost per customer should be going up as well.

What is also not discussed in the Amy Hoy business model is the potential role of an investor. I think it would be a better business model if it could speak to that aspect as well. See my article, including investors in your business model, for more on this apsect.

I congratulate Amy for the success in her business and her efforts to educate software developers about alternative business models they might be using to earn a living. Amy also provides tips about starting up a SaaS business model that would be useful to know (i.e., sourcing of profitable ideas for services).

She also alludes to the "year of the hustle" as a critical element in her business model. The business model is not going to achieve it's guidance estimates if you are not prepared to engage in a "year of the hustle". The "year of the hustle" could refer to the collection of marketing techniques you plan to apply to the problem of growing your business. As you refine your business model, you should also be scheming about the collection of marketing techniques that might be used to help launch and grow your product or service. Then you execute during the "year of the hustle".

The "year of the hustle" is a timeframe that a startup might reasonably take to launch and start growing a business to a level where the income generated starts meeting bill obligations or lifestyle requirements again. If an entrepreneur can live cheaply and spend wisely, then they can potentially run a lean ship until profits start rolling in at a sufficient rate to justify the "year of the hustle". Your business model after 1 year can be used to project where you should be financially at the end of year 1. The end of year 1 totals for revenue, costs, and profits are, for startups, critical to determining the ultimate validity of the business model and its ability to sustain itself.

Permalink 

Including uncertainty in your business model [Business Models
Posted on February 13, 2013 @ 09:09:00 AM by Paul Meagher

A major missing ingredient in my business modelling efforts to date is the concept of "uncertainty". When we are projecting our business model into the future we can really only speculate as to whether the assumptions on which the business model are based are realistic and will approximate the true values for revenues, costs, and profits over time. That being said, we can still try our level best to create a business model that approximates how we think the future will unfold. In order to do our level best, however, we have to have tools for modelling the future that are up to the task. There are many variables that you might want to add to a model in order to accommodate some unique quirck of your business model. Ideally, the business modelling tool you select will have a built in knob for that variable. Or you can just use a general purpose programming language like PHP and hack one up yourself. This article series provides "hackers" or "DIY" types with some code and ideas to get started in crafting a business model for your business.


Source: http://en.wikipedia.org/wiki/Uncertainty

The concept of uncertainty is a very peculiar one. It is located in the nether regions between the concept of chaotic randomness and risk. The term is often used in professional discourse to denote a random variable that is quantifiable, such as the distribution of height among the population where the mean and standard deviation of the distribution can be estimated (along with kurtosis and skew). You may want to compare this definition to the above diagram to see where it fits (perhaps along the upper or lower arm depending on your philosophical stance towards the nature of uncertainty).

In the context of business modelling, we can introduce uncertainty into any variable. For example, instead of assigning the variable $num_new_customers_per_month the single value of 10, we might assign it a mean value for each year in the projection along with either a single variance estimate or a set of variance estimates for each year. As each year passes in our model, we sample from a "new customers per month" normal distribution (or poisson distribution for fewer customers or rare events) that has a different mean, and perhaps a different variance. This will produce monthly estimates of new customers that varies around a mean each year with the mean expected to increase as the model projects further into the future.

So that is how I propose to introduce uncertainty into business modelling.

There will be no code in todays' post because introducing uncertainty will require the inclusion of a Probability Distributions Library (PDL) to make the inclusion of random variables into our modelling efforts more elegant and powerful. Fortunately, I have developed a Probability Distributions Library using PHP that can be used for this purpose. In order to share code in the future, however, I need to setup a repository where the full code base powering the business models is available. Towards that end I have setup a MrDealflow github account and am in the process of figuring out how to use it (looks like it will be fairly straight-forward so far). When I have the next iteration of my business model prototype ready that includes uncertainty, I will upload the code to this location and post an article on it.

Permalink 

Including investors in your business model [Business Models
Posted on February 12, 2013 @ 09:05:00 AM by Paul Meagher

I added some new features to the monthly linear growth business model I discussed in my last blog posting. In the newest version of that business model, I have added the idea of investor involvement. Including an investor in the business model has the benefit of clarifying the timeframe in which an investment might be paid back. The investor is assumed to receive, on a monthly basis, some percentage of the overall profit the company makes in that month. These profits will be paid out, or at least calculated, on a monthly basis and at the end of the projected time period, we can determine if the investor has recouped their original investment yet. If they have, we can calculate how much profit they have earned so far.

I developed a script called monthly_growth_with_investor.php to model investor involvement.

I configured this model with the same settings I used in the monthly_growth.php business model discussed in my last blog posting (Implementing a business model in PHP). I added two new settings, one for the size of the investment made in the company ($investment_size) and a second for the percentage of profits the investor will earn in return for their investment ($investor_profit_percentage). Given these additional settings, this is the report that the monthly_growth_with_investor.php script generates.

YearMonth# Customers RevenuesCostsProfits Company ProfitsInvestor Profits
2013 2 10 $300.00 $1,100.00 -$800.00 -$800.00 $0.00
2013 3 20 $600.00 $1,200.00 -$600.00 -$600.00 $0.00
2013 4 30 $900.00 $1,300.00 -$400.00 -$400.00 $0.00
2013 5 40 $1,200.00 $1,400.00 -$200.00 -$200.00 $0.00
2013 6 50 $1,500.00 $1,500.00 $0.00 $0.00 $0.00
2013 7 60 $1,800.00 $1,600.00 $200.00 $160.00 $40.00
2013 8 70 $2,100.00 $1,700.00 $400.00 $320.00 $80.00
2013 9 80 $2,400.00 $1,800.00 $600.00 $480.00 $120.00
2013 10 90 $2,700.00 $1,900.00 $800.00 $640.00 $160.00
2013 11 100 $3,000.00 $2,000.00 $1,000.00 $800.00 $200.00
2013 12 110 $3,300.00 $2,100.00 $1,200.00 $960.00 $240.00
2013 Totals $19,800.00 $17,600.00 $2,200.00 $1,360.00 $840.00
2014 1 120 $3,600.00 $2,200.00 $1,400.00 $1,120.00 $280.00
2014 2 130 $3,900.00 $2,300.00 $1,600.00 $1,280.00 $320.00
2014 3 140 $4,200.00 $2,400.00 $1,800.00 $1,440.00 $360.00
2014 4 150 $4,500.00 $2,500.00 $2,000.00 $1,600.00 $400.00
2014 5 160 $4,800.00 $2,600.00 $2,200.00 $1,760.00 $440.00
2014 6 170 $5,100.00 $2,700.00 $2,400.00 $1,920.00 $480.00
2014 7 180 $5,400.00 $2,800.00 $2,600.00 $2,080.00 $520.00
2014 8 190 $5,700.00 $2,900.00 $2,800.00 $2,240.00 $560.00
2014 9 200 $6,000.00 $3,000.00 $3,000.00 $2,400.00 $600.00
2014 10 210 $6,300.00 $3,100.00 $3,200.00 $2,560.00 $640.00
2014 11 220 $6,600.00 $3,200.00 $3,400.00 $2,720.00 $680.00
2014 12 230 $6,900.00 $3,300.00 $3,600.00 $2,880.00 $720.00
2014 Totals $63,000.00 $33,000.00 $30,000.00 $24,000.00 $6,000.00
2015 1 240 $7,200.00 $3,400.00 $3,800.00 $3,040.00 $760.00
2015 2 250 $7,500.00 $3,500.00 $4,000.00 $3,200.00 $800.00
2015 3 260 $7,800.00 $3,600.00 $4,200.00 $3,360.00 $840.00
2015 4 270 $8,100.00 $3,700.00 $4,400.00 $3,520.00 $880.00
2015 5 280 $8,400.00 $3,800.00 $4,600.00 $3,680.00 $920.00
2015 6 290 $8,700.00 $3,900.00 $4,800.00 $3,840.00 $960.00
2015 7 300 $9,000.00 $4,000.00 $5,000.00 $4,000.00 $1,000.00
2015 8 310 $9,300.00 $4,100.00 $5,200.00 $4,160.00 $1,040.00
2015 9 320 $9,600.00 $4,200.00 $5,400.00 $4,320.00 $1,080.00
2015 10 330 $9,900.00 $4,300.00 $5,600.00 $4,480.00 $1,120.00
2015 11 340 $10,200.00 $4,400.00 $5,800.00 $4,640.00 $1,160.00
2015 12 350 $10,500.00 $4,500.00 $6,000.00 $4,800.00 $1,200.00
2015 Totals $106,200.00 $47,400.00 $58,800.00 $47,040.00 $11,760.00
2016 1 360 $10,800.00 $4,600.00 $6,200.00 $4,960.00 $1,240.00
2016 2 370 $11,100.00 $4,700.00 $6,400.00 $5,120.00 $1,280.00
2016 Totals $21,900.00 $9,300.00 $12,600.00 $10,080.00 $2,520.00
Overall Totals $210,900.00 $107,300.00 $103,600.00 $82,480.00 $21,120.00

The investor has not recouped their $50,000.00 investment yet. You still owe the investor $28,880.00.

So, after three years the investor has not earned back her initial investment of $50,000. If we ran the model out to 5 years with all the other configurations staying the same, you might have a situation where the investor has recouped their investment and made some profit. Alternatively, if we offer the investor a greater percentage of the profits, we can pay back the investor (with a profit) in a period of 3 years or less. The benefit of a formalized business model is that it puts relevant decision making information on the table for an entrepreneur and an investor to inspect, jointly understand, and hopefully agree upon as to the exact arrangement that might work.

For those more technically inclined, below is the PHP script implementing a simple linear business model with an investor.

<?php 
/**
* Prototypical business model involving the generation of monthly 
* revenue based upon the number of existing customers plus new 
* customers per month with each customer paying a monthly fixed fee.  
* Costs based upon monthly fee for servicing "rents" and a cost per 
* customer (variable cost) for providing the service to the customer.
*
* The involvement of an investor is assumed in this model.  The 
* investor is represented with two variables.  An "investment size"
* variable and an "investor profit percentage" variable.
*
* Assumes simple linear growth with an investor. 
*
* @script: monthly_growth_with_investor.php
* @author: Paul Meagher
* @sponsor: Dealflow Solutions Ltd. & PlanetDealflow.ca
* @url: http://www.planetdealflow.ca
* @version: 0.2
* @modified: Feb 11, 2012
*/

// PART 1: CHANGE THESE SETTINGS

// Set number of years for your projections.
$num_years 3;

$num_new_customers_per_month 10;
$monthly_fee_per_customer 30;
$monthly_cost_per_customer  10;

// Cost of "rents" per month.
$fixed_cost_per_month 1000;

// Starting number of customers customers - default 0.  
$num_customers 0;  

// New variables added to model investor involvement
$investment_size 50000;
$investor_profit_percentage .20;

// Set money formatting according to a locale setting.
setlocale(LC_MONETARY'en_CA');

// Starting month - defaults to current month.
$start_month date("n");

// PART 2: DO NOT CHANGE THESE INITIALIZATION SETTINGS

// setup year number to year date mapping for reporting purposes
$year_num_to_year_date[1] = $next_year date("Y");
for(
$n 2$n <= $num_years+1$n++) {
    
$next_year $next_year 1
    
$year_num_to_year_date[$n] = $next_year;
}

// Zero the parameters we will be estimating
$costs    = array();
$revenues = array();
$profits  = array();
$company_profits  = array();
$investor_profits = array();

// Zero the accumulator variables
$total_profits 0;
$total_costs 0;
$total_revenues 0;
$total_company_profits 0;
$total_investor_profits 0;

// PART C: GENERATE REPORT PROVIDING ESTIMATES OF COST, 
// REVENUES, & PROFITS
?>

<table border='1' cellpadding='5' cellspacing='0'>
  <thead>
    <tr>
      <th>Year</th><th>Month</th><th># Customers</th>
      <th>Revenues</th><th>Costs</th><th>Profits</th>
      <th>Company Profits</th><th>Investor Profits</th>
    </tr>
  </thead>
  <tbody>
  <?php
  
if ($start_month == 1
    
$y_end $num_years;
  else
    
$y_end $num_years 1
  
  for(
$y=1$y<=$y_end$y++) {
      
      if (
$y == 1
        
$m $start_month;
      else
        
$m 1;
    
    for (
$m$m<=12$m++) {
      
      
$num_customers $num_customers $num_new_customers_per_month;
      
      
$year_date     $year_num_to_year_date[$y];
      

      if ((
$y == $y_end) AND ($m == ($start_month+1)))
        break; 
      else {
          
          
// The data structures don't have to be this complicated
        // but they can be used in downstream calculatios more  
        // easily in this format.
        
$costs[$year_date][$m]    = ($num_customers $monthly_cost_per_customer
                                    + 
$fixed_cost_per_month;
        
$revenues[$year_date][$m] = $num_customers $monthly_fee_per_customer;
        
$profits[$year_date][$m]  = $revenues[$year_date][$m] - $costs[$year_date][$m];
        
        
// Allocate perentages of the profit to the investor or the company
        // when profits are negative investor makes 0 and company takes 
        // the loss
        
if ($profits[$year_date][$m] < 0) {      
          
$investor_profits[$year_date][$m] = 0;
          
$company_profits[$year_date][$m] = $profits[$year_date][$m]; 
        } else {
          
$investor_profits[$year_date][$m] = $profits[$year_date][$m] * 
                                              
$investor_profit_percentage;
          
$company_profits[$year_date][$m] = $profits[$year_date][$m] * 
                                              (
1-$investor_profit_percentage);          
        }
      
      }      
      
?>
      <tr>
       <td><?php echo $year_date ?></td>    
       <td align='center'><?php echo $m ?></td>    
       <td align='center'><?php echo $num_customers ?></td>           
       <td align='right'><?php echo money_format('%n'$revenues[$year_date][$m]) ?></td>    
       <td align='right'><?php echo money_format('%n'$costs[$year_date][$m]) ?></td>    
       <td align='right'><?php echo money_format('%n'$profits[$year_date][$m]) ?></td>    
       <td align='right'><?php echo money_format('%n'$company_profits[$year_date][$m]) ?></td>    
       <td align='right'><?php echo money_format('%n'$investor_profits[$year_date][$m]) ?></td>    
      </tr>
      <?php
    
}
    
$profits[$year_date]['total']          = array_sum($profits[$year_date]);
    
$costs[$year_date]['total']            = array_sum($costs[$year_date]);
    
$revenues[$year_date]['total']         = array_sum($revenues[$year_date]);
    
$company_profits[$year_date]['total']  = array_sum($company_profits[$year_date]);
    
$investor_profits[$year_date]['total'] = array_sum($investor_profits[$year_date]);    
    
    
$total_profits +=  $profits[$year_date]['total'];
    
$total_costs += $costs[$year_date]['total'];
    
$total_revenues +=  $revenues[$year_date]['total'];
    
$total_company_profits += $company_profits[$year_date]['total'];
    
$total_investor_profits += $investor_profits[$year_date]['total'];
    
?>
    <tr>
        <th colspan='3' align='right'><?php echo $year_date." Totals"?></th>
        <td align='right'><?php echo money_format('%n'$revenues[$year_date]['total']); ?></td>
        <td align='right'><?php echo money_format('%n'$costs[$year_date]['total']); ?></td>
        <td align='right'><?php echo money_format('%n'$profits[$year_date]['total']); ?></td>
        <td align='right'><?php echo money_format('%n'$company_profits[$year_date]['total']); ?></td>
        <td align='right'><?php echo money_format('%n'$investor_profits[$year_date]['total']); ?></td>
    </tr>
    <?php
  
}      
  
?> 
  <tr>
    <th colspan='3' align='right'><?php echo "Overall Totals"?></th>
    <td align='right'><?php echo money_format('%n'$total_revenues); ?></td>    
    <td align='right'><?php echo money_format('%n'$total_costs); ?></td>
    <td align='right'><?php echo money_format('%n'$total_profits); ?></td>    
    <td align='right'><?php echo money_format('%n'$total_company_profits); ?></td>
    <td align='right'><?php echo money_format('%n'$total_investor_profits); ?></td>
  </tr>
  </tbody>   
</table>

<?php
$amount_owing 
$investment_size $total_investor_profits;
if (
$amount_owing 0) {
  
?>
  <p>
  <b>The investor has not recouped their <?php echo money_format('%n'$investment_size?> 
  investment yet.  You still owe the investor <?php echo money_format('%n'$amount_owing?>.</b>
  </p>
  <?php
} else {
    
$profit_earned $amount_owing * -1;
    
?>
    <p>
  <b>The investor has recouped their <?php echo money_format('%n'$investment_size?> investment.
  The investor has earned <?php echo money_format('%n'$profit_earned?> in profits so far.</b>
  </p> 
  <?php
}
?>

Permalink 

Implementing a business model in PHP [Business Models
Posted on February 11, 2013 @ 06:07:00 AM by Paul Meagher

In my previous article, I critized the idea that you could claim to have a business model if it was not sufficiently well defined that you could run it as a computer program that would estimate costs, revenue, and profit over time. I concluded by saying that I would reveal a runnable business model in my next article. Well, here it is.

I developed a script called monthly_growth.php which implements a business model that assumes you will grow your business by a certain number of new customers each month and those customers will each pay a monthly fee for your service. The revenues from new and existing customers each month is offset by two types of costs - a fixed monthly cost for "rents" and a variable costs associated with the cost of servicing each client. As the number of clients grows this servicing cost grows.

I run the script by pointing my browser at the url where it resides on my web server. If you host a site you probably have access to a PHP interpreter so could potentially run this script by saving it in a web folder on your site and then typing in the url to that file in your web browser. If you have the php module running in your webserver then you will see the table output below when you do so. I will also be making a web-based front end to this script in it's next iteration so that you can just run the model from this site by entering values in the input form. I did, however, want you to see the "guts" of what an implemented business model looks like so wanted to keep this version as simple as possible to make it easier to follow and modify for your own purposes.

Before running the script you need to review a few settings and change them to values that might be more appropriate to your situation. In this example, I'm assuming that we are starting from 0 customers, will add 10 new customers each month, and each of those customers will pay a monthly fee of $30. The monthly fixed fee, the "rents", is assumed to be $1000 a month and the cost of servicing each customer is assumed to be $10 a month. I'm interested in projecting out to 3 years into the future. This set of configurations generates this business model output:

YearMonth# CustomersRevenuesCostsProfits
2013 2 10 $300.00 $1,100.00 -$800.00
2013 3 20 $600.00 $1,200.00 -$600.00
2013 4 30 $900.00 $1,300.00 -$400.00
2013 5 40 $1,200.00 $1,400.00 -$200.00
2013 6 50 $1,500.00 $1,500.00 $0.00
2013 7 60 $1,800.00 $1,600.00 $200.00
2013 8 70 $2,100.00 $1,700.00 $400.00
2013 9 80 $2,400.00 $1,800.00 $600.00
2013 10 90 $2,700.00 $1,900.00 $800.00
2013 11 100 $3,000.00 $2,000.00 $1,000.00
2013 12 110 $3,300.00 $2,100.00 $1,200.00
2014 1 120 $3,600.00 $2,200.00 $1,400.00
2014 2 130 $3,900.00 $2,300.00 $1,600.00
2014 3 140 $4,200.00 $2,400.00 $1,800.00
2014 4 150 $4,500.00 $2,500.00 $2,000.00
2014 5 160 $4,800.00 $2,600.00 $2,200.00
2014 6 170 $5,100.00 $2,700.00 $2,400.00
2014 7 180 $5,400.00 $2,800.00 $2,600.00
2014 8 190 $5,700.00 $2,900.00 $2,800.00
2014 9 200 $6,000.00 $3,000.00 $3,000.00
2014 10 210 $6,300.00 $3,100.00 $3,200.00
2014 11 220 $6,600.00 $3,200.00 $3,400.00
2014 12 230 $6,900.00 $3,300.00 $3,600.00
2015 1 240 $7,200.00 $3,400.00 $3,800.00
2015 2 250 $7,500.00 $3,500.00 $4,000.00
2015 3 260 $7,800.00 $3,600.00 $4,200.00
2015 4 270 $8,100.00 $3,700.00 $4,400.00
2015 5 280 $8,400.00 $3,800.00 $4,600.00
2015 6 290 $8,700.00 $3,900.00 $4,800.00
2015 7 300 $9,000.00 $4,000.00 $5,000.00
2015 8 310 $9,300.00 $4,100.00 $5,200.00
2015 9 320 $9,600.00 $4,200.00 $5,400.00
2015 10 330 $9,900.00 $4,300.00 $5,600.00
2015 11 340 $10,200.00 $4,400.00 $5,800.00
2015 12 350 $10,500.00 $4,500.00 $6,000.00
2016 1 360 $10,800.00 $4,600.00 $6,200.00
2016 2 370 $11,100.00 $4,700.00 $6,400.00

So what we have here are monthly estimates of cost, revenue, and profit over a three year period. We can see how our revenues grow faster than our costs and eventually starts producing a profit situation which increases over time. You might be saying "but the assumptions are too simple". You might argue that customers won't come in as regular blocks of 10 new customers a month but rather as a smaller number per month at the beginning and a larger number per month as your business gains momentum. The beauty of providing you with the source code is that you are now empowered to change the business model so that customer growth follows, say, an exponential function or piecewise-linear function rather than a simple linear one. You can do that if you have access to the source code which is provided below (with lots of comments in the code that preclude the need for me to explain it much more):

<?php 
/**
* Prototypical business model involving the generation of monthly 
* revenue based upon the number of existing customers plus new 
* customers per month with each customer paying a monthly fixed fee.  
* Costs based upon monthly fee for servicing "rents" and a cost per 
* customer (variable cost) for providing the service to the customer.
*
* Assumes simple linear growth. 
*
* @script: monthly_growth.php
* @author: Paul Meagher
* @version: 0.1
* @modified: Feb 11, 2012
*/

// PART 1: CHANGE THESE SETTINGS

// Set number of years for your projections.
$num_years 3;

$num_new_customers_per_month 10;
$monthly_fee_per_customer 30;
$monthly_cost_per_customer  10;

// Cost of "rents" per month.
$fixed_cost_per_month 1000;

// Starting number of customers customers - default 0.  
$num_customers 0;  

// Set money formatting according to a locale setting.
setlocale(LC_MONETARY'en_CA');

// Starting month - defaults to current month.
$start_month date("n");

// PART 2: DO NOT CHANGE THESE INITIALIZATION SETTINGS

// setup year number to year date mapping for reporting purposes
$year_num_to_year_date[1] = $next_year date("Y");
for(
$n 2$n <= $num_years+1$n++) {
    
$next_year $next_year 1
    
$year_num_to_year_date[$n] = $next_year;
}

// Zero the parameters we will be estimating
$costs    = array();
$revenues = array();
$profits  = array();

// PART C: GENERATE REPORT PROVIDING ESTIMATES OF COST, 
// REVENUES, & PROFITS
?>

<table border='1' cellpadding='5' cellspacing='0'>
  <thead>
    <tr>
      <th>Year</th><th>Month</th><th># Customers</th>
      <th>Revenues</th><th>Costs</th><th>Profits</th>
    </tr>
  </thead>
  <?php
  
if ($start_month == 1
    
$y_end $num_years;
  else
    
$y_end $num_years 1
  
  for(
$y=1$y<=$y_end$y++) {
      
      if (
$y == 1
        
$m $start_month;
      else
        
$m 1;
    
    for (
$m$m<=12$m++) {
      
$num_customers $num_customers $num_new_customers_per_month;
      
$year_date     $year_num_to_year_date[$y];
      
// the data structures don't have to be this complicated
      // but they can be used in downstream calculatios more  
      // easily in this format
      
$costs[$year_date][$m]    = ($num_customers $monthly_cost_per_customer
                                  + 
$fixed_cost_per_month;
      
$revenues[$year_date][$m] = $num_customers $monthly_fee_per_customer;
      
$profits[$year_date][$m]  = $revenues[$year_date][$m] - $costs[$year_date][$m];
      if ((
$y == $y_end) AND ($m == ($start_month+1)))
        break; 
      
?>
      <tr>
       <td><?php echo $year_date ?></td>    
       <td align='center'><?php echo $m ?></td>    
       <td align='center'><?php echo $num_customers ?></td>           
       <td align='right'><?php echo money_format('%n'$revenues[$year_date][$m]) ?></td>    
       <td align='right'><?php echo money_format('%n'$costs[$year_date][$m]) ?></td>    
       <td align='right'><?php echo money_format('%n'$profits[$year_date][$m]) ?></td>    
      </tr>
      <?php
    
}
  }
  
?>
</table>

There is more to be said and done on the topic of business models so I may continue posting on this topic this week.

Permalink 

What is your business model? [Business Models
Posted on February 8, 2013 @ 11:06:00 AM by Paul Meagher

If your answer is along the lines of sell units and make money, then sorry, that is not a business model. Why? Because it is not precise enough to be formalized into a program that generates estimates of revenue, cost, and profit over time. That is a business model. Reminds me of Crocodile Dundee who famously said "that's not a knife, this is a knife".

Many entrepreneurs have gotten along in business without having to develop a formal business model so why is it necessary or important to create a business model? A formal business model may not, in fact, be necessary to grow and run your business if you are able to grow your business organically without outside loans or investment (a sell units and make money orientation is sufficient). If, however, you require outside loans or investment to grow your business then the process of raising capital becomes more efficient for the investor and the entrepreneur if you can run a business model that can be used to generate estimates of cost, revenue, and profit over time. A shared understanding of the business model is a valuable tool to move the investment process along. Like any model, a business model does not account for all aspects of your business, only the critical elements, and for specific purposes. What is most important is that you and the investor can agree that this is how the business can work given some reasonable assumptions.

So what does a business model look like? Stay tuned next week when I will post a simple business model formalized as a PHP program.

Permalink 

 Archive 
 

Categories


 Agriculture [67]
 Bayesian Inference [14]
 Books [14]
 Business Models [24]
 Causal Inference [2]
 Creativity [7]
 Decision Making [15]
 Decision Trees [8]
 Design [36]
 Eco-Green [3]
 Economics [11]
 Education [10]
 Energy [1]
 Entrepreneurship [53]
 Events [2]
 Farming [19]
 Finance [25]
 Future [15]
 Growth [16]
 Investing [23]
 Lean Startup [9]
 Leisure [5]
 Lens Model [9]
 Making [1]
 Management [9]
 Motivation [3]
 Nature [22]
 Patents & Trademarks [1]
 Permaculture [34]
 Psychology [1]
 Real Estate [2]
 Robots [1]
 Selling [11]
 Site News [13]
 Startups [12]
 Statistics [3]
 Systems Thinking [2]
 Trends [5]
 Useful Links [3]
 Valuation [1]
 Venture Capital [5]
 Video [2]
 Writing [2]