Hi Jonathan,

Let's try to figure this out. In smart importer can you printout the following stuff


in smart_importer/predictor.py


in __call__ around line 64

print(self.account)

print(existing_entries)


in load_training_data around line 91

print(training_data)

and around line 95

print(training_data)


That should give an idea where the information is "lost". Depending on where the information is lost, you can then dig a bit deeper into what is happening.


Regards,

Patrick





On 18.05.2021 13:14, Jonathan Goldman wrote:
Thanks Red.

bean-query works fine on my input file which now has >1000 transactions .

Ready with 1344 directives (2266 postings in 1133 transactions).

beancount>

I still get the error. I'm not sure what is causing and not sure how to debug it. The only other issue I recall seeing was some error with fund_info or something in getting prices but I thought it was an unrelated issue.

Do you or does anyone have some suggestions on where/how to debug. E.g. I should print some variables to STDOUT at such and such point inside smart_importer code or inside bean-extract.

thanks,
Jonathan



On Mon, May 17, 2021 at 9:34 PM [email protected] <mailto:[email protected]> <[email protected] <mailto:[email protected]>> wrote:

    A minimum of two transactions should suffice for smart_importer.
    More will increase prediction quality, but two should suffice. I
    can't tell what's happening at your end, but you're likely ending
    up with zero transactions for some reason. Run bean-query on the
    file you pass to "-f" of bean-extract.

    beancount-reds-importers supports smart_importer out of the box
    for banking, that shouldn't be an issue AFAICT.



    On Wednesday, May 12, 2021 at 10:23:14 PM UTC-7 [email protected]
    <mailto:[email protected]> wrote:

        Thanks for suggestions @Patrick and Alan. My beancount file
        has about 64 Asset accounts. It has about 41 expense accounts.
        I have only 2 months of labelled banking transactions (about
        42 transactions) all associated with one bank account and
        various expense accounts.

        I had thought that some transactions were relatively
        deterministic (same $ amount and same description like
        rent/mortgage) and I was under the impression that only a few
        months of data are needed to get going.

        Perhaps I'll just go back to manually labelling data for now
        and trying again later or after I see more posts/explanation
        of smart_importer. I'm not well-versed enough with
        smart_importer to debug what is happening.

        On Thu, May 13, 2021 at 3:04 AM Alan H <[email protected]> wrote:

            I get this error when there are insufficient entries in
            the journal to teach the smart_importer how to file new
            transactions. Specifically there are no matches for payees
            or narrations.

            Is that the case? Try adding a dummy transaction that
            matches the narration in the import file.

            Alan


            On Wednesday, May 12, 2021 at 12:24:55 PM UTC+1
            [email protected] wrote:

                Hm, actually that looks ok, it has the
                existing_entries on the interface. But to be honest
                I'm not super familiar with how the apply hook is
                hooking this in, so there might be an issue.

                Maybe someone more familiar with this can respond on that.


                Otherwise if you could install smart_importer from git
                and then maybe add a bit more debug output in

                hooks.py and predictor.py to make sure that the
                existing entries arrive, this would give a better idea
                how to progress.


                On 12.05.2021 13:17, [email protected] wrote:
                Thank you. I think that is it.

                I'm using reds-importers and I see
                site-packages/beancount_reds_importers/libimport/banking.py
                and it has this entry:

                def extract(self, file, existing_entries=None):

                I think this importer tool needs to be updated to
                support the smart_importer.

                On Wednesday, May 12, 2021 at 11:11:37 PM UTC+12
                [email protected] wrote:

                    I just remembered something. The issue could be
                    that the importer you're trying to use does not
                    have the new interface and instead still uses the
                    old (legacy) interface.

                    the new one looks like this


                    def extract(self, file, existing_entries):

                    the old one looks like this

                    def extract(self, file):


                    Smart importer uses the existing_entries for
                    training its model.


                    Regards,

                    Patrick




                    On 12.05.2021 12:20, [email protected] wrote:
                    Just checked and I got the same result. I can
                    add some debugging code in the config file
                    perhaps. I'm not very experienced with beancount
                    or smart_importer so not sure what to look for.

                    bean-extract -e journal/accounts.beancount
                    jonathan_smart.import ~/staging/mydata.qfx  >
                    ~/staging/dud.txt

                    gives 2 printouts of

                    Cannot train the machine learning model because
                    the training data is empty.

                    Cannot train the machine learning model because
                    the training data is empty.

                    On Wednesday, May 12, 2021 at 7:15:19 PM UTC+12
                    [email protected] wrote:

                        Can you try -e instead of -f that's what I use


                        On May 12, 2021 8:31:36 AM GMT+02:00,
                        "[email protected]" <[email protected]> wrote:

                            Thanks for the suggestion @Patrick. I
                            just tried changing that but still
                            doesn't work. I get the exact same
                            behavior if I call it with an empty
                            file....seems the -f option doesn't make
                            bean-extract behave as expected for me.
                            Here is my call:

                            bean-extract -f
                            journal/myledger.beancount
                            jonathan_smart.import
                            ~/staging/62090_818496_1013051ofxdl.qfx
                            > ~/staging/dud.txt

                            I get these messages:

                            Cannot train the machine learning model
                            because the training data is empty.

                            Cannot train the machine learning model
                            because the training data is empty.


                            On Wednesday, May 12, 2021 at 5:31:25 PM
                            UTC+12 [email protected] wrote:

                                Hi,

                                I think your setup looks good, the
                                smart importer hook is in there as
                                otherwise you would not get the
                                errors about not able to train.

                                I think the issue is on your call


                                bean-extract jonathan_smart.import
                                ~/staging/new_bank_data.qfx -f
                                journal/myledger.beancount >
                                ~/staging/dud.txt


                                My guess is that the -f argument
                                needs to come before you specify the
                                importconfig and the location, so


                                bean-extract -f
                                journal/myledger.beancount
                                jonathan_smart.import
                                ~/staging/new_bank_data.qfx >
                                ~/staging/dud.txt


                                Regards,

                                Patrick


                                On 12.05.2021 01:58,
                                [email protected] wrote:
                                Thanks for looking at this module
                                even though you aren't using it!

                                I followed the code that was
                                further down on the readme page
                                <https://github.com/beancount/smart_importer>
                                that describes how to convert an
                                existing importer.
                                >>
                                from your_custom_importer import
                                MyBankImporter
                                from smart_importer import
                                apply_hooks, PredictPayees,
                                PredictPostings

                                my_bank_importer =
                                MyBankImporter('whatever',
                                'config', 'is', 'needed')
                                apply_hooks(my_bank_importer,
                                [PredictPostings(), PredictPayees()])
                                CONFIG = [ my_bank_importer, ]
                                >>
                                (my code looks just like this example)

                                I had thought apply_hooks would
                                operate on the importer so when I
                                call it in config I can just then
                                call the hookified bank_importer.
                                Is this note the case?

                                On Wednesday, May 12, 2021 at
                                1:26:27 AM UTC+12
                                [email protected] wrote:

                                    * Disclaimer * I have never
                                    actually run smart importer.

                                    Looking at the README on GitHub
                                    for smart importer it looks
                                    like you need to use the return
                                    object of apply_hooks in your
                                    CONFIG list.

                                    CONFIG = [
                                    
apply_hooks(MyBankImporter(account='Assets:MyBank:MyAccount'),
                                    [PredictPostings()]) ]

                                    In your config you apply the
                                    hooks but are not using the
                                    returned object.

                                    Hope that helps.

                                    On Tuesday, 11 May 2021 at
                                    04:06:33 UTC+1
                                    [email protected] wrote:

                                        Hi,

                                        I'm trying to get
                                        smart_importer to work and
                                        not sure what I'm doing wrong.

                                        *_1_*. I successfully have
                                        done all the required
                                        beancount setup and created
                                        by own bank importer and
                                        ran it on two months of data.
                                        _*2.*_ I then manually
                                        labelled about 2 months of
                                        data from one of my banks.
                                        *_3._* I installed
                                        smart_importer using "pip
                                        install smart_importer"

                                        (base) MacBook-Air:beandata
                                        jonathan$ pip show
                                        smart_importer

                                        Name: smart-importer

                                        Version: 0.3

                                        Summary: Augment Beancount
                                        importers with machine
                                        learning functionality.

                                        Home-page:
                                        
https://github.com/beancount/smart_importer
                                        
<https://github.com/beancount/smart_importer>

                                        Author: Johannes Harms

                                        Author-email: UNKNOWN

                                        License: MIT

                                        Location:
                                        
/Users/jonathan/opt/miniconda3/lib/python3.8/site-packages

                                        Requires: scikit-learn,
                                        beancount, numpy, scipy

                                        *_4._* I created a new
                                        config file I called
                                        Jonathan_smart.import


                                        base) MacBook-Air:beandata
                                        jonathan$ more
                                        jonathan_smart.import

                                        #!/usr/bin/env python3

                                        """Import configuration."""


                                        import sys

                                        from os import path


                                        sys.path.insert(0,
                                        path.join(path.dirname(__file__)))


                                        from
                                        beancount_reds_importers
                                        import vanguard

                                        from myimporters.bfsfcu
                                        import bfsfcu_bank

                                        from myimporters.anz import
                                        anz_bank

                                        from fund_info import *

                                        from smart_importer import
                                        apply_hooks, PredictPayees,
                                        PredictPostings


                                        myBank_smart_importer
                                        =my_bank.Importer({

                                        'main_account'   :
                                        'Assets:US:Banks:Checking:myBank',

                                        'account_number' : ''xxx'',

                                        'transfer'   :
                                        
'Assets:US:Zero-Sum-Accounts:Transfers:Bank-Account',

                                        'income'   :
                                        'Income:US:Interest:myBank',

                                        'fees'   :
                                        'Expenses:US:Bank-Fees:myBank',

                                        'rounding_error' :
                                        'Equity:US:Rounding-Errors:Imports',

                                            })


                                        apply_hooks(myBank_smart_importer,
                                        [PredictPayees(),
                                        PredictPostings()])

                                        CONFIG =
                                        [myBank_smart_importer,
                                        ...(other importers)]


                                        *_5_*. I was following the
                                        README documentation that
                                        said write bean-extract -f
                                        to invoke it on existing
                                        data. So I tried the
                                        following.*Is this right?*

                                        bean-extract
                                        jonathan_smart.import
                                        ~/staging/new_bank_data.qfx
                                        -f
                                        journal/myledger.beancount
                                        > ~/staging/dud.txt

                                        Cannot train the machine
                                        learning model because the
                                        training data is empty.

                                        Cannot train the machine
                                        learning model because the
                                        training data is empty.


                                        The output is just like the
                                        normal output without all
                                        the smart_importer stuff.
                                         Seems I'm doing something
                                        wrong as the
                                        staging/dud.txt doesn't
                                        have any predictions.


                                        Appreciate any assistance
                                        on this!


                                        thanks,

                                        Jonathan

-- You received this message because
                                you are subscribed to the Google
                                Groups "Beancount" group.
                                To unsubscribe from this group and
                                stop receiving emails from it, send
                                an email to
                                [email protected].
                                To view this discussion on the web
                                visit
                                
https://groups.google.com/d/msgid/beancount/820ef641-8178-47d1-9e97-afbc709e6a83n%40googlegroups.com
                                
<https://groups.google.com/d/msgid/beancount/820ef641-8178-47d1-9e97-afbc709e6a83n%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- You received this message because you are
                    subscribed to the Google Groups "Beancount" group.
                    To unsubscribe from this group and stop
                    receiving emails from it, send an email to
                    [email protected].
                    To view this discussion on the web visit
                    
https://groups.google.com/d/msgid/beancount/fe28577c-8220-49cd-b976-40ef9f0b6a91n%40googlegroups.com
                    
<https://groups.google.com/d/msgid/beancount/fe28577c-8220-49cd-b976-40ef9f0b6a91n%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- You received this message because you are subscribed
                to the Google Groups "Beancount" group.
                To unsubscribe from this group and stop receiving
                emails from it, send an email to
                [email protected].
                To view this discussion on the web visit
                
https://groups.google.com/d/msgid/beancount/6248ca60-16fa-4ad0-88b5-1c4bb91f9feen%40googlegroups.com
                
<https://groups.google.com/d/msgid/beancount/6248ca60-16fa-4ad0-88b5-1c4bb91f9feen%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- You received this message because you are subscribed to
            the Google Groups "Beancount" group.
            To unsubscribe from this group and stop receiving emails
            from it, send an email to [email protected].

            To view this discussion on the web visit
            
https://groups.google.com/d/msgid/beancount/2b800e6d-fb0c-4b78-bde3-477eee6f9e7en%40googlegroups.com
            
<https://groups.google.com/d/msgid/beancount/2b800e6d-fb0c-4b78-bde3-477eee6f9e7en%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- You received this message because you are subscribed to the Google
    Groups "Beancount" group.
    To unsubscribe from this group and stop receiving emails from it,
    send an email to [email protected]
    <mailto:[email protected]>.
    To view this discussion on the web visit
    
https://groups.google.com/d/msgid/beancount/f1e3ce25-e842-45b4-bb28-4f3737a3cb9en%40googlegroups.com
    
<https://groups.google.com/d/msgid/beancount/f1e3ce25-e842-45b4-bb28-4f3737a3cb9en%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups "Beancount" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]>. To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/CANUAcYdz12pG%2BPyxiBdn5-L14TtSztkJ8A%2BQ8Fwfd753vN0-tg%40mail.gmail.com <https://groups.google.com/d/msgid/beancount/CANUAcYdz12pG%2BPyxiBdn5-L14TtSztkJ8A%2BQ8Fwfd753vN0-tg%40mail.gmail.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/858c5ceb-7507-5f9c-793a-4dd5a4bd44e2%40ch.tario.org.

Reply via email to